2015-12-15 35 views
5

Per rendere i valori disponibili all'intero ambiente CMake da una sottodirectory, è possibile impostare una variabile cache utilizzando la sintassi set(VARIABLE_NAME Value CACHE INTERNAL "") o impostare una proprietà globale utilizzando la sintassi set_property(GLOBAL PROPERTY VARIABLE_NAME Value) (vedere anche this very good answer sulle variabili in CMake).CMake variabili cache rispetto a proprietà globali: semplice sintassi per utilizzare il valore variabile

L'utilizzo di quest'ultimo ha i vantaggi che non si sta "inquinando" la cache di CMake per qualcosa per cui non è stato progettato e che non si dipende dalla cache che viene eliminata quando non si utilizza il parametro FORCE.

Ma la sintassi per utilizzare il valore della variabile non è così user-friendly in quanto è necessario recuperare il valore utilizzando get_property invece di utilizzare semplicemente la notazione ${...}.

C'è una sintassi più semplice da usare invece di get_property (una sorta di zucchero sintattico)?

+1

'" inquinando "la cache di CMake per qualcosa per cui non è progettato per - La cache di CMake ** è progettata ** per le variabili di cache interne (tra le altre cache). 'non dipende dalla cache che viene cancellata quando non si utilizza il parametro FORCE' -' INTERNAL' ** implica ** 'FORCE'. Quindi, è perfettamente OK usare le variabili di 'CACHE INTERNAL' come globali, e questo è raccomandato. – Tsyvarev

+0

@Tsyvarev Grazie per il suggerimento sulla variabile della cache 'INTERNAL'. [La mia risposta] (http://stackoverflow.com/questions/31037882/whats-the-cmake-syntax-to-set-and-use-variables/31044116#31044116) non è chiara e l'ho aggiornata di conseguenza. La ragione principale per cui preferisco le proprietà di 'GLOBAL' è che semplifica i test (non c'è differenza tra la prima e tutte le esecuzioni consecutive). – Florian

+0

@Roland Sarrazin Puoi fare un esempio in cui è necessario recuperare il valore di una proprietà globale? Non esiste un accesso diretto alle proprietà come con le variabili, ma ci sono alcune scorciatoie che semplificano la vita come la sintassi 'set_property (GLOBAL APPEND PROPERTY ...)' da aggiungere ad una proprietà lista (invece di ottenere, accodare e impostarlo). – Florian

risposta

2

Riassumiamo i commenti.

Alla mia domanda attuale: non esiste un collegamento specifico per utilizzare get_property.

commenti utili:

  • Come CACHE INTERNAL implica FORCE è bene utilizzare le variabili memorizzate nella cache per rendere variabili globalmente accessibile.
  • È buona norma avviare il file CMake pulendo/impostando esplicitamente le variabili della cache interna per evitare comportamenti imprevedibili durante le esecuzioni ripetute.