5

Ho un'applicazione scritta in C++ che utilizzo CMake per creare e rilasciare i binari.Utilizzare CMake per eseguire un programma C++ post-build

Mi piacerebbe avere lo script CMakeLists.txt compilare ed eseguire un file CPP che viene utilizzato per timestamp e crittografare un file di licenza dopo aver costruito i file binari per l'applicazione. Ho visto esempi di esecuzione del comando execute_process come questo:

execute_process(COMMAND "gcc -o foo foo.cpp" 
       WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) 
execute_process(COMMAND "./foo" 
       WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 
       RESULT_VARIABLE MY_FOO_VAR) 

Sto usando Visual Studio 2010 per fare la build su Windows. Il problema è che non sono sicuro di come ottenere CMake per eseguire un programma durante il processo di generazione di VS. Voglio che l'ultimo elemento nell'operazione di compilazione sia il timestamp del file di licenza, ma in realtà non so abbastanza su VS o CMake per ottenere questo set up.

risposta

13

Si dice che si desidera eseguire il file dopo la generazione.execute_process() viene eseguito in CMake-time, non al momento della compilazione. Quello che stai cercando potrebbe essere add_custom_command():

comando
add_executable(LicenseStamper stamper.cpp) 

add_custom_command(
    OUTPUT stamped_file.lic 
    COMMAND LicenseStamper any other arguments 
    DEPENDS any/dependency.file 
    COMMENT "Stamping the license" 
    VERBATIM 
) 

add_custom_target(
    StampTheLicense ALL 
    DEPENDS stamped_file.lic 
) 

Il costume verrà eseguito il file eseguibile (e costruire in primo luogo, se necessario). Il target personalizzato guiderà il comando personalizzato - dipende dall'output del comando, quindi quando viene creato il target, richiederà che venga creata la sua dipendenza, causando l'esecuzione del comando personalizzato.