CMake: Как указать каталог, где ctest должен искать исполняемые файлы?

Я хотел интегрировать 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 чтобы найти исполняемый файл?

2

Решение

Документация за 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 который вы используете.

3

Другие решения

В наших проектах мы всегда указываем путь при вызове add_test (), например:

add_test( ${filename}  ${CMAKE_CURRENT_BINARY_DIR}/${filename} )
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector