Richq'in cevabının bir varyantını kullanıyorum. En üst düzeyde CMakeLists.txt
, build_and_test
tüm testleri oluşturmak ve çalıştırmak için özel bir hedef ekliyorum :
find_package(GTest)
if (GTEST_FOUND)
enable_testing()
add_custom_target(build_and_test ${CMAKE_CTEST_COMMAND} -V)
add_subdirectory(test)
endif()
Aşağıdaki çeşitli alt proje CMakeLists.txt
dosyalarında test/
, her bir test yürütülebilir dosyasını aşağıdakilere bağımlı olarak ekliyorum 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)
Bu yaklaşımla, (veya ) make build_and_test
yerine yapmam gerekiyor ve yalnızca test kodu (ve bağımlılıkları) oluşturma avantajına sahip. Hedef adını kullanamamam çok yazık . Ben dışı ağacının hata ayıklama ve sürüm (ve çapraz derlenmiş) çağırarak kurar yapan bir üst düzey komut dosyası var çünkü Benim durumumda, o kadar kötü değil sonra ve ve o çevirir içine .make test
make all test
test
cmake
make
test
build_and_test
Açıkçası, en iyi şeyler gerekli değil. Google Test kullanıyorum / beğeniyorum ve bunu CMake / CTest ile kullanmanın eksiksiz bir örneğini paylaşmak istedim. IMHO, bu yaklaşım aynı zamanda ctest -V
testler çalıştırılırken Google Test çıktısını gösteren kullanmama izin verme avantajına da sahiptir :
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