CMake: исполняемый файл вылетает при запуске ctest

Я настраиваю проект сборки CMake в Windows для проекта MSVC ++. Он хорошо строит исполняемый файл, затем устанавливает его в определенный каталог. В моих случаях это:

$ {CMAKE_SOURCE_DIR} / x64 / $ {CMAKE_BUILD_TYPE} /

Исполняемый файл имеет папку в том же каталоге с файлами, которые он загружает при запуске. Если я запускаю .exe вручную, он открывается и запускается нормально. Но я хочу сделать это через ctest.
Я определил ctest следующим образом:

add_test(ENGINE_TEST1 ${CMAKE_SOURCE_DIR}/x64/${CMAKE_BUILD_TYPE}/MyApp.exe
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/x64/${CMAKE_BUILD_TYPE})

Когда я звоню из cmd:

ctest

Исполняемый файл запускается, но сразу падает с ошибкой:

Ошибка отладки!

Программа: ../…./…/ MyApp.exe

R6010 -abort () имеет

был вызван.

Действительно, при проверке файла Last Test.log CMake он показывает, что он запускает тест не в «WORKING_DIRECTORY», а в каталоге, где MyApp.exe был создан CMake. Как это изменить?

0

Решение

Поскольку я не CMake Pro, я уверен, что следующий ответ не является оптимальным способом сделать это, но, по крайней мере, он работает для меня.
Опять же, я пытался запустить ctest для исполняемого файла из каталога, в который его установил cmake. Exe при запуске пытался загрузить зависимые файлы, которые находились в том же каталоге. Но он зависал, потому что не мог завершить файлы.
Похоже, что каталог по умолчанию рабочей области cmake — это каталог, в котором создаются файлы и проекты cmake. Это каталог ‘build’. Так что, когда исполняемый файл запускается с помощью ctest, он ищет пути к файлам для загрузки относительно каталога сборки.
Теперь CMAKE имеет 2 варианта add_test() method.One просто с аргументами:

 add_test([test_name]  [test exe path])

Это не заботится о рабочем каталоге.

И еще один, который объяснил здесь содержит аргумент для явной настройки рабочего каталога.

Честно говоря, я не смог заставить эту расширенную функцию работать, так как она требовала предоставить некоторый тестовый .config, который я не понимал, как настроить. Так что я сделал, я использовал простую функцию add_test.
И затем я устанавливаю рабочий каталог в местоположение моего исполняемого файла, используя это:

 set_tests_properties(mytest PROPERTIES WORKING_DIRECTORY "${TEST_WOKRING_DIR}")

И это решило проблему.

0

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

Других решений пока нет …