Как изменить рабочий каталог исполняемого файла Cmake

Я пишу тесты для проекта Cmake. Проект содержит подпроект библиотеки и тестовый подпроект, предназначенный для тестирования библиотеки.

Тесты требуют сравнения некоторых выходных изображений с некоторыми сохраненными значениями, поэтому проект содержит каталоги [ImageReferences] и [ImageOutputs].

Структура проекта следующая:

-[root]
---CMakeList.txt
---[library]
------CMakeList.txt
---[test]
------[ImageReferences]
------[ImageOutputs]
------CMakeList.txt
---[build]
------[library]
------[test]

Если я запускаю cmake в папке [build], исполняемый файл теста окажется в папке [build/test]. Это хорошо и задумано, но когда я запускаю ctest, у меня нет возможности указать, где находятся [ImageReferences] и [ImageOutputs].

В настоящее время в коде я делаю:

ref_path = "../../test/ImageReferences"
out_path = "../../test/ImageOutputs"

Это явно не идеально и может сломаться.

Решение, которое я хотел бы реализовать, состоит в том, чтобы изменить каталог, из которого запускается исполняемый файл. Если бы я мог указать [test] в качестве рабочего каталога, я мог бы просто напрямую ссылаться на папки [ImageReferences] и [ImageOutputs], оставив исполняемые файлы в папке [build/test].

Я пытался сделать это либо в cmake, либо в качестве аргумента для ctest, но не смог. Мне было интересно, есть ли способ достичь этого.

Если ответ отрицательный, я хотел бы понять, какие альтернативы у меня есть, чтобы больше не зависеть от шатких локальных путей.


person Ryno    schedule 24.04.2019    source источник


Ответы (1)


Мне удалось заставить его работать через ctest, выполнив:

add_test(
    NAME ${TESTNAME}
    COMMAND ${TESTNAME}
    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})

Однако это не работает при использовании CMake с Visual Studio 2017 и запуске тестов из панели обозревателя тестов.

person Ryno    schedule 24.04.2019