मैं रिचट के उत्तर के एक संस्करण का उपयोग करता हूं। शीर्ष-स्तर में CMakeLists.txt, मैं build_and_testसभी परीक्षणों के निर्माण और चलाने के लिए एक कस्टम लक्ष्य जोड़ता हूं :
find_package(GTest)
if (GTEST_FOUND)
enable_testing()
add_custom_target(build_and_test ${CMAKE_CTEST_COMMAND} -V)
add_subdirectory(test)
endif()
के CMakeLists.txtतहत विभिन्न उप-परियोजना फाइलों में test/, मैं प्रत्येक परीक्षण को निष्पादन पर निर्भर करता हूं 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)
इस दृष्टिकोण के साथ, मुझे make build_and_testइसके बजाय make test(या make all test) की आवश्यकता है, और इसमें केवल भवन परीक्षण कोड (और इसकी निर्भरता) का लाभ है। यह शर्म की बात है कि मैं लक्ष्य नाम का उपयोग नहीं कर सकता test। मेरे मामले में, यह इतना बुरा नहीं है क्योंकि मेरे पास एक शीर्ष-स्तरीय स्क्रिप्ट है जो आउट-ऑफ-ट्री डिबग और रिलीज़ (और क्रॉस-संकलित) कॉल करके बनाता है cmakeऔर फिर make, और इसका अनुवाद testकरता है build_and_test।
जाहिर है, GTest सामान की आवश्यकता नहीं है। मैं केवल Google टेस्ट का उपयोग / पसंद करना चाहता हूं, और इसे CMake / CTest के साथ उपयोग करने का एक पूरा उदाहरण साझा करना चाहता हूं। IMHO, इस दृष्टिकोण का मुझे उपयोग करने की अनुमति देने का भी लाभ है ctest -V, जो परीक्षण चलाने के दौरान Google परीक्षण आउटपुट दिखाता है:
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