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.txt
file 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_test
daripada 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 cmake
dan kemudian make
, dan itu diterjemahkan test
menjadi 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