Ho un problema molto simile, ma la soluzione qui presentata non è davvero soddisfacente. Come il poster originale, voglio eseguire test unitari basati su boost :: test.
ho più progetti di test, uno per ogni componente il sindaco del nostro prodotto. Dovendo eseguire la destinazione dell'installazione prima di ogni test, è necessario ricompilare tutto per eseguire i test appartenenti a un componente principale. Questo è quello che voglio evitare.
Se cambio qualcosa in un componente fondamentale, voglio compilare tale componente core e le relative prove. E poi esegui i test. Quando i test hanno successo, solo allora voglio compilare ed eventualmente installare il resto.
Per eseguire i test nel debugger, ho trovato alcuni script cmake molto utile a: https://github.com/rpavlik/cmake-modules
Con questo, posso specificare tutte le directory delle DLL necessarie, e la variabile d'ambiente PATH è impostato per la nuovo processo:
# for debugging
INCLUDE(CreateLaunchers)
create_target_launcher(PLCoreTests
ARGS "--run-test=Core1"
RUNTIME_LIBRARY_DIRS ${PL_RUNTIME_DIRS_DEBUG} ${PROJECT_BINARY_DIR}/bin/Debug
WORKING_DIRECTORY ${PL_MAIN_DIR}/App/PL/bin
)
dove $ {} PL_RUNTIME_DIRS_DEBUG contiene le directory in cui le DLL di spinta e tutte le altre librerie possono essere trovati.
Ora sto cercando come posso ottenere qualcosa di simile con ADD_CUSTOM_COMMAND()
Aggiornamento:
ADD_CUSTOM_COMMAND() può avere più comandi che CMake scrive in un file batch. Quindi, è possibile innanzitutto impostare il percorso con tutte le directory di runtime e quindi eseguire il test eseguibile. Per essere in grado di eseguire facilmente i test manualmente, ho lasciato cmake creare un file batch aggiuntivo nella directory di compilazione:
MACRO(RunUnitTest TestTargetName)
IF(RUN_UNIT_TESTS)
SET(TEMP_RUNTIME_DIR ${PROJECT_BINARY_DIR}/bin/Debug)
FOREACH(TmpRuntimeDir ${PL_RUNTIME_DIRS_DEBUG})
SET(TEMP_RUNTIME_DIR ${TEMP_RUNTIME_DIR} ${TmpRuntimeDir})
ENDFOREACH(TmpRuntimeDir)
ADD_CUSTOM_COMMAND(TARGET ${TestTargetName} POST_BUILD
COMMAND echo "PATH=${TEMP_RUNTIME_DIR};%PATH%" > ${TestTargetName}_script.bat
COMMAND echo ${TestTargetName}.exe --result_code=no --report_level=no >> ${TestTargetName}_script.bat
COMMAND ${TestTargetName}_script.bat
WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/Debug
)
ENDIF(RUN_UNIT_TESTS)
ENDMACRO()
Con questo, i test di unità cattura gli errori nel più breve tempo possibile, senza dover compilare l'intero molto prima
http://www.cmake.org/cmake/help/cmake-2-8-docs.html#command:install –