Я пишу тесты для проекта 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, но не смог. Мне было интересно, есть ли способ достичь этого.
Если ответ отрицательный, я хотел бы понять, какие альтернативы у меня есть, чтобы больше не зависеть от шатких локальных путей.