У меня есть несколько файлов конфигурации (xml, ini,...) в каталоге config
рядом с исходными файлами. Как я могу копировать все файлы в каталоге config в каталог сборки (рядом с исполняемым файлом) каждый раз, когда я создаю проект?
Как скопировать содержимое каталога в каталог сборки после make с CMake?
Ответ 1
Вы можете использовать add_custom_command
.
Скажем, ваша цель называется MyTarget
, тогда вы можете сделать это:
add_custom_command(TARGET MyTarget PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
${CMAKE_SOURCE_DIR}/config/ $<TARGET_FILE_DIR:MyTarget>)
Это выполняется каждый раз, когда вы MyTarget
и копирует содержимое "/config" в каталог, где будет MyTarget
целевой exe/lib.
Как отмечает Марк Лаката в комментарии ниже, замена PRE_BUILD
на POST_BUILD
в add_custom_command
гарантирует, что копирование произойдет только в случае add_custom_command
сборки.
объяснение
-
${CMAKE_COMMAND}
- это путь к CMake. -
-E
делает команды запуска CMake вместо сборки -
copy_directory
- это инструмент командной строки -
config
- это каталог (который находится в корне проекта), содержимое которого будет скопировано в цель сборки -
$<TARGET_FILE_DIR:MyTarget>
- это выражение генератора, описанное в документацииadd_custom_command
.
Ответ 2
CMake поддерживает копию файла типа оболочки. Эта ссылка должна быть полезной для вас - Как скопировать каталог из исходного дерева в двоичное дерево?
Ответ 3
В дополнение к верхнему ответу,
Чтобы скопировать сам каталог вместо содержимого, вы можете добавить /${FOLDER_NAME}
в конец второго параметра.
Как это:
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
${CMAKE_SOURCE_DIR}/config $<TARGET_FILE_DIR:${PROJECT_NAME}>/config)
Ответ 4
В моем проекте я использую INSTALL для указания в CMake, что и где я перемещаю свой двоичный файл с conf файлом. После выполнения cmake используйте команду "make install".