मैं रिचट के उत्तर के एक संस्करण का उपयोग करता हूं। शीर्ष-स्तर में 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