2016-01-28 16 views
5

Ho difficoltà a comprendere CMake. Quello che voglio fare è eseguire il seguente comando bash durante il processo di compilazione:Esecuzione di comandi bash da un file CMake

date +"%F %T" > timestamp

Questo recupera la data corrente e lo scrive in un file. Tuttavia, non riesco a riprodurre questa semplice azione usando i comandi di CMake.

Qui ci sono alcune cose che ho provato:

execute_process(COMMAND "date +'%F %T' > timestamp")

add_custom_command(OUTPUT timestamp COMMAND date +"%F %T")

file(WRITE timestamp date +"%F %T")

Né sembrano funzionare. Mi chiedo quasi se siano addirittura giustiziate.

Ho una conoscenza molto limitata di come CMake e la sua sintassi, quindi probabilmente sto facendo le cose molto male. Spero che qualcuno possa indicarmi la giusta direzione. Grazie!

+1

Non è possibile usare '>' in là ... http://stackoverflow.com/a/31523634/2836621 –

+0

Eventuali duplicati di [Come ottenere cmake per creare il file timestamp dopo un effettivo build/link? (non fare nulla se l'eseguibile non è cambiato)] (http://stackoverflow.com/questions/13419255/how-to-get-cmake-to-create-timestamp-file-after-an-actual-build-link- do-nothin) – Tsyvarev

risposta

5

Penso che il mio problema principale fosse la mancanza di virgolette sui miei argomenti di comando. Inoltre, grazie a @ Marco Setchell ho capito dovrei usare OUTPUT_VARIABLE in luogo di OUTPUT

In ogni caso, ecco la risposta sono arrivato al:

execute_process (
    COMMAND bash -c "date +'%F %T'" 
    OUTPUT_VARIABLE outVar 
) 

Questo memorizza l'output del comando bash in la variabile outVar

file(WRITE "datestamp" "${outVar}") 

E questo scrive il contenuto di outVar in un file chiamato "datestamp".

+1

Complimenti per l'elaborazione e la condivisione dei risultati. Puoi accettare anche la tua risposta :-) –

0

Nota -Utilizzo bash -c sarà anche preparare-terminare una nuova linea alla fine della variabile che farà sì che rendono a lamentarsi a seconda di come lo si utilizza

build.make: *** mancante separatore. Stop.

questo dovrebbe risolvere il sopra

execute_process(COMMAND which grpc_cpp_plugin OUTPUT_VARIABLE GRPC_CPP_PLUGIN) 
string(STRIP ${GRPC_CPP_PLUGIN} GRPC_CPP_PLUGIN) 
message(STATUS "MY_VAR=${GRPC_CPP_PLUGIN}")