Как правильно добавить ресурсы в проект? - PullRequest
4 голосов
/ 21 мая 2011

У меня есть проект, организованный следующим образом:

  • include/
  • src/
  • share/myprogram/

где share/myprogram/ содержит ресурсы. Моя программа обращается к этим ресурсам, используя относительные пути. Исполняемый файл ожидает найти их в ../share/myprogram/.

Я бы хотел, чтобы я запустил:

mkdir build
cd build
cmake ..
make

чтобы произошло следующее:

  • сделать каталог bin
  • скомпилируйте и поместите исполняемый файл в bin/
  • скопировать каталог share в каталог build

Я ищу чистый способ сделать это. В идеале я хотел бы, чтобы CMake знал о ресурсах как ресурсы .
Я знаю, что я мог бы использовать пользовательскую команду копирования. Это единственный способ добиться этого?

Бонус

Если при использовании генератора XCode ресурсы могут отображаться в Ресурсы в XCode, и копия будет этапом чистого копирования под целью mybin, это было бы здорово (и это то, что я имею в виду под CMake знать ресурсы как ресурсы .)


Обновление:

Что у меня есть до сих пор:

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin)
add_executable(mybin ${Headers} ${Sources})

add_custom_target(
    Resources ALL
    ${CMAKE_COMMAND} -E copy_directory ${PROJECT_SOURCE_DIR}/share ${PROJECT_BINARY_DIR}/share
    SOURCES ${Resources}
)

Ответы [ 2 ]

2 голосов
/ 21 мая 2011

Вы можете использовать Configure_file для копирования файлов из исходного каталога в двоичный каталог.у него есть параметр Copyonly .

0 голосов
/ 14 июня 2011

Я использую инструмент командной строки Unix, я не работаю с пакетом Mac OS X, а папка ресурсов Xcode предназначена только для ресурсов комплекта, поэтому забудьте про бонус.

Я понял, что ничего не делалправильно.Использование относительного пути для доступа к ресурсу ненадежно, поскольку программу можно выполнить из любого места.То, что я сделал, - это поиск ресурсов в иерархии папок, начиная с указанной пользователем, до переменной среды, до относительных каталогов и, наконец, до стандартных каталогов Unix.

Таким образом, на самом деле, этап копирования во время сборки не являетсянеобходимо больше.Только установка имеет значение, и это довольно просто:

install(DIRECTORY share/ DESTINATION share)

К вашему сведению, я сохранил свой custom_target как есть, так как мне нравится, когда ресурсы отображаются в XCode, и вызов его Resources делает его красивым:)

...