Saya menggunakan varian jawaban richq. Di tingkat atas CMakeLists.txt, saya menambahkan target khusus build_and_test,, untuk membangun dan menjalankan semua pengujian:
find_package(GTest)
if (GTEST_FOUND)
enable_testing()
add_custom_target(build_and_test ${CMAKE_CTEST_COMMAND} -V)
add_subdirectory(test)
endif()
Di berbagai CMakeLists.txtfile sub-proyek di bawah test/, saya menambahkan setiap pengujian yang dapat dieksekusi sebagai ketergantungan 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)
Dengan pendekatan ini, saya hanya perlu make build_and_testdaripada make test(atau make all test), dan ini memiliki keuntungan hanya membangun kode pengujian (dan dependensinya). Sayang saya tidak bisa menggunakan nama target test. Dalam kasus saya, ini tidak terlalu buruk karena saya memiliki skrip tingkat atas yang melakukan debug dan rilis out-of-tree (dan dikompilasi silang) dengan memanggil cmakedan kemudian make, dan itu diterjemahkan testmenjadi build_and_test.
Jelas, hal-hal GTest tidak diperlukan. Saya kebetulan menggunakan / menyukai Google Test, dan ingin membagikan contoh lengkap cara menggunakannya dengan CMake / CTest. IMHO, pendekatan ini juga memiliki keuntungan karena memungkinkan saya untuk menggunakan ctest -V, yang menunjukkan keluaran Google Test saat pengujian berjalan:
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