Utilizo una variante de la respuesta de richq. En el nivel superior CMakeLists.txt
, agrego un objetivo personalizado build_and_test
, para construir y ejecutar todas las pruebas:
find_package(GTest)
if (GTEST_FOUND)
enable_testing()
add_custom_target(build_and_test ${CMAKE_CTEST_COMMAND} -V)
add_subdirectory(test)
endif()
En los diversos CMakeLists.txt
archivos de subproyecto a continuación test/
, agrego cada ejecutable de prueba como una dependencia de build_and_test
:
include_directories(${CMAKE_SOURCE_DIR}/src/proj1)
include_directories(${GTEST_INCLUDE_DIRS})
add_executable(proj1_test proj1_test.cpp)
target_link_libraries(proj1_test ${GTEST_BOTH_LIBRARIES} pthread)
add_test(proj1_test proj1_test)
add_dependencies(build_and_test proj1_test)
Con este enfoque, solo necesito en make build_and_test
lugar de make test
(o make all test
), y tiene la ventaja de crear solo código de prueba (y sus dependencias). Es una pena que no pueda usar el nombre del objetivo test
. En mi caso, no es tan malo porque tengo un script de nivel superior que depura y libera (y compila de forma cruzada) compilaciones fuera del árbol llamando cmake
y luego make
, y se traduce test
en build_and_test
.
Obviamente, las cosas de GTest no son necesarias. Simplemente uso / me gusta Google Test, y quería compartir un ejemplo completo de su uso con CMake / CTest. En mi humilde opinión, este enfoque también tiene la ventaja de permitirme usar ctest -V
, que muestra el resultado de la prueba de Google mientras se ejecutan las pruebas:
1: Running main() from gtest_main.cc
1: [==========] Running 1 test from 1 test case.
1: [----------] Global test environment set-up.
1: [----------] 1 test from proj1
1: [ RUN ] proj1.dummy
1: [ OK ] proj1.dummy (0 ms)
1: [----------] 1 test from proj1 (1 ms total)
1:
1: [----------] Global test environment tear-down
1: [==========] 1 test from 1 test case ran. (1 ms total)
1: [ PASSED ] 1 test.
1/2 Test #1: proj1_test ....................... Passed 0.03 sec