আমি রিচকের উত্তরের বৈকল্পিক ব্যবহার করি। শীর্ষ-স্তরে 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
স্পষ্টতই, জিস্টেস্ট স্টাফগুলির প্রয়োজন নেই। আমি গুগল টেস্টের মতো / ব্যবহার করার মতোই হয়েছি এবং সিএমকে / সিটেষ্টের সাথে এটি ব্যবহারের একটি সম্পূর্ণ উদাহরণ ভাগ করতে চেয়েছি। আইএমএইচও, এই পদ্ধতির আমাকে ব্যবহার করার অনুমতি দেওয়ার সুবিধাও রয়েছে ctest -V
, যা পরীক্ষাগুলি চলাকালীন গুগল টেস্ট আউটপুট দেখায়:
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