Подтвердить что ты не робот

Как скопировать содержимое каталога в каталог сборки после make с CMake?

У меня есть несколько файлов конфигурации (xml, ini,...) в каталоге config рядом с исходными файлами. Как я могу копировать все файлы в каталоге config в каталог сборки (рядом с исполняемым файлом) каждый раз, когда я создаю проект?

4b9b3361

Ответ 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.

Ответ 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".