CMake: Как скопировать только определенные расширения файлов из одного каталога в другой

Я использую следующую пользовательскую команду, чтобы скопировать все файлы в config каталог в build каталог. Проблема в том, что я не хочу .svn каталог для копирования, а также. Я ищу способ либо исключить .svn каталог или для копирования файлов с определенным расширением. например Я хочу только файлы с xml или же conf расширения для копирования. Что я должен делать?

add_custom_command(TARGET MyTarget PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
${CMAKE_SOURCE_DIR}/config $<TARGET_FILE_DIR:MyTarget>)

связанный вопрос

6

Решение

Чтобы скопировать только .xml а также .conf файлы, вы можете использовать file(GLOB ...) команда:

# Gather list of all .xml and .conf files in "/config"file(GLOB ConfigFiles ${CMAKE_SOURCE_DIR}/config/*.xml
${CMAKE_SOURCE_DIR}/config/*.conf)

foreach(ConfigFile ${ConfigFiles})
add_custom_command(TARGET MyTarget PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E
copy ${ConfigFile} $<TARGET_FILE_DIR:MyTarget>)
endforeach()

Это аналогичный процесс, чтобы получить все файлы не в .svn подкаталог:

# Gather list of all files in "/config"file(GLOB ConfigFiles RELATIVE ${CMAKE_SOURCE_DIR}/config
${CMAKE_SOURCE_DIR}/config/*)

# Gather list of all files in "/config/.svn"file(GLOB SvnConfigFiles RELATIVE ${CMAKE_SOURCE_DIR}/config
${CMAKE_SOURCE_DIR}/config/.svn/*)

# Remove ".svn" and its contents from the list
list(REMOVE_ITEM ConfigFiles .svn ${SvnConfigFiles})

foreach(ConfigFile ${ConfigFiles})
add_custom_command(TARGET MyTarget PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E
copy ${CMAKE_SOURCE_DIR}/config/${ConfigFile}
$<TARGET_FILE_DIR:MyTarget>)
endforeach()
12

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector