Я настраиваю проект сборки 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. Как это изменить?
Поскольку я не 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}")
И это решило проблему.
Других решений пока нет …