У меня есть несколько файлов конфигурации (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".