Tôi sử dụng một biến thể của câu trả lời richq. Ở cấp cao nhất CMakeLists.txt
, tôi thêm một mục tiêu tùy chỉnh build_and_test
, để xây dựng và chạy tất cả các thử nghiệm:
find_package(GTest)
if (GTEST_FOUND)
enable_testing()
add_custom_target(build_and_test ${CMAKE_CTEST_COMMAND} -V)
add_subdirectory(test)
endif()
Trong các CMakeLists.txt
tệp dự án con khác nhau bên dưới test/
, tôi thêm từng tệp thực thi thử nghiệm dưới dạng phụ thuộc của 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)
Với cách tiếp cận này, tôi chỉ cần make build_and_test
thay vì make test
(hoặc make all test
) và nó có lợi ích là chỉ xây dựng mã thử nghiệm (và các phụ thuộc của nó). Thật tiếc khi tôi không thể sử dụng tên mục tiêu test
. Trong trường hợp của tôi, nó không quá tệ vì tôi có một tập lệnh cấp cao nhất thực hiện gỡ lỗi và phát hành (và biên dịch chéo) các bản dựng bằng cách gọi cmake
và sau đó make
, và nó được dịch test
sang build_and_test
.
Rõ ràng, nội dung GTest không bắt buộc. Tôi chỉ tình cờ sử dụng / thích Google Test và muốn chia sẻ một ví dụ hoàn chỉnh về việc sử dụng nó với CMake / CTest. IMHO, cách tiếp cận này cũng có lợi ích là cho phép tôi sử dụng ctest -V
, hiển thị kết quả Kiểm tra của Google trong khi các bài kiểm tra chạy:
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