Я хотел интегрировать ctest в проект c ++ / c. Я использую Google тесты, чтобы написать модульные тесты.
Соответствующая часть моего CMakeLists.txt выглядит так:
...
####### CREATING EXE #######
add_executable(test_exe main.cpp test.cpp)
target_link_libraries(test_exe GTest::GTest GTest::Main)
set_target_properties (test_exe PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${UNIT_TEST_BIN_OUTPUT_DIR})
add_test(test_exe test_exe)
Как вы можете видеть, я указал выходной каталог моего исполняемого файла (UNIT_TEST_BIN_OUTPUT_DIR).
Исполняемый файл прекрасно работает сам по себе, когда я использую терминал:
cd <UNIT_TEST_BIN_OUTPUT_DIR>
./test_exe
Я хочу использовать ctest для выполнения моих тестов. Поэтому я перехожу к «папке ctest», сгенерированной cmake. Здесь я хочу использовать ctest для выполнения всех тестов, добавленных «add_test» в cmake.
user@user:~/<dir to cmake>/cmake/unit_tests$ ctest
Test project /<dir to cmake>/cmake/unit_tests
Start 1: test_exe
Could not find executable test_exe
Looked in the following places:
test_exe
test_exe
Release/test_exe
Release/test_exe
Debug/test_exe
Debug/test_exe
MinSizeRel/test_exe
MinSizeRel/test_exe
RelWithDebInfo/test_exe
RelWithDebInfo/test_exe
Deployment/test_exe
Deployment/test_exe
Development/test_exe
Development/test_exe
Unable to find executable: test_exe
1/1 Test #1: test_exe ......***Not Run 0.00 sec
0% tests passed, 1 tests failed out of 1
Total Test time (real) = 0.00 sec
The following tests FAILED:
1 - test_exe (Not Run)
Errors while running CTest
Если я добавлю «test_exe» в один из указанных путей, он будет работать нормально. Но я не хочу, чтобы они были там.
Мой вопрос:
Есть ли способ сказать ctest, что он должен смотреть в UNIT_TEST_BIN_OUTPUT_DIR
чтобы найти исполняемый файл?
Документация за add_test
определяет working_directory вариант для длинная форма команды. Значение этой опции используется как каталог, в котором работает тест:
add_test(NAME test_exe COMMAND test_exe WORKING_DIRECTORY ${UNIT_TEST_BIN_OUTPUT_DIR})
Более того, поскольку тестовый исполняемый файл в вашем случае создан CMake, достаточно просто использовать длинная форма из add_test
, без дополнительных опций:
add_test(NAME test_exe COMMAND test_exe)
CMake будет автоматически заменить имя цели «test_exe», используется в КОМАНДА с полным путем к созданному исполняемому файлу.
Обратите внимание, что автоматическая замена цели не работает для краткой формы add_test
который вы используете.
В наших проектах мы всегда указываем путь при вызове add_test (), например:
add_test( ${filename} ${CMAKE_CURRENT_BINARY_DIR}/${filename} )