2015-01-06 3 views
1

У меня есть проект со следующей структурой дерева реж:Cmake и ресурсы путь

CMakeLists.txt 
\src 
    test.cpp 
\include 
    test.h 
\resources 
    various resource files 

test.cpp содержит правильный путь (по отношению к корню) для того, чтобы указать на ресурсы в директории ресурсов. При запуске CMake с исходным зданием в каталоге сборки каталог \ build создается как поддиректор корня, но теперь ресурсы, на которые ссылаются ранее правильные пути, жестко закодированные в test.cpp, больше не доступны, потому что рабочий каталог не является корнем.

Как я могу управлять ресурсами с использованием CMake и из-источника?

ответ

2

Это зависит от вас, как автор программы, чтобы иметь смысл относительных путей. С относительным путем вы должны всегда быть в курсе , что это относительно. «Каталог исходных файлов» - ужасная контрольная точка, поскольку она не существует во время выполнения.

Это путь относительно текущей (= рабочей) директории? Тогда это выходит за рамки управления CMake, и вы должны запустить свою программу правильно. Для целей тестирования вы можете установить свойство теста WORKING_DIRECTORY.

Есть путь к исполняемому файлу? Если это так, вы можете либо поместить исполняемый файл через его свойство RNTIME_OUTPUT_DIRECTORY, и/или скопировать ресурсы в нужное место, используя file(COPY) или configure_file(COPYONLY).

+0

Спасибо, но первое предложение кажется мне действительно очевидным !!! : D Так что это не добавило значения вашему ответу ... То, что я имел в виду в своем посте (хотя было ясно), состоит в том, что проблема связана с построением вне источника (эта модальность кажется единственной полезно для четкого разделения источников и исполняемых файлов с помощью CMake!), что приводит к тому, что работающий динамик отличается и, по крайней мере, ниже уровня ниже корень. Так что это особенность CMake ... Я не встречал такой проблемы с муравьями или другими инструментами. Во всяком случае, я попытаюсь понять, как использовать команды, которые вы предложили. Tnx много! – davide

+0

@davide Я не думаю, что здесь есть что-то специфичное для CMake. Все программы обычно запускаются вне источника просто потому, что именно так развертываются программы. Даже с программами с открытым исходным кодом вы отправляете источники, чтобы программа могла быть изменена, а не так, чтобы она могла работать. – Angew

Смежные вопросы