2012-09-07 9 views
5

Sto usando CMake per compilare il mio sistema e i miei test di unità.CMake come installare i file di test con le unit test

Sto anche facendo una build out-of-source.

Ho trovato con il comando ADD_TEST(), che non è necessario installare il test eseguibile (verrà eseguito solo quando si esegue make install, che è ottimo).

Tuttavia, i miei test di unità dipendono da alcuni file di input, che devono essere copiati nel punto in cui è stato creato l'eseguibile.

Per quanto ne so, non posso usare INSTALL() per copiare i file lì, perché non ho specificato dove è - dipende da dove viene chiamato il comando di generazione.

C'è un modo in cui posso dire a CMake di copiare i miei file di test nello stesso percorso in cui crea l'eseguibile?

risposta

1

questo potrebbe non essere la soluzione migliore, ma attualmente sto facendo questo:

file(COPY my_directory DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) 

che sembra fare il trucco.

+1

Funziona, ma la copia avviene al momento della configurazione. – fgiraldeau

3

Certo, si può fare questo sul passo di configurazione in questo modo:

execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${fileFrom} ${fileTo}) 

Se i file di input dipendono qualcosa prodotto da costruzione, è possibile creare un obiettivo per esso e aggiungerlo al all bersaglio:

add_custom_target(copy_my_files ALL 
    COMMAND ${CMAKE_COMMAND} -E copy_if_different ${fileFrom} ${fileTo} 
    DEPENDS ${fileFrom} 
) 
+0

La variabile 'CMAKE_PROGRAM' deve essere invece' CMAKE_COMMAND'. – fgiraldeau

7

È possibile utilizzare CONFIGURE_FILE con il parametro COPYONLY. Ed eseguire la copia al dir di generazione: $ {} CMAKE_CURRENT_BINARY_DIR

+0

Un esempio: http://stackoverflow.com/a/1587317/1808261 – dtmland

0

La domanda è piuttosto vecchia, ma a mio parere esiste una soluzione migliore del problema rispetto alla copia dei file necessari per ${CMAKE_CURRENT_BINARY_DIR}). Il comando add_test ha un'opzione WORKING_DIRECTORY che consente di scegliere la directory in cui vengono eseguiti i test. Quindi suggerirei la seguente soluzione:

add_executable(testA testA.cpp) 
add_test(NAME ThisIsTestA COMMAND testA WORKING_DIRECTORY ${DIRECTORY_WITH_TEST_DATA}) 

Ciò evita inutilmente la copia dei file di input.