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

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

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

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

Ответы на вопрос(1)

Решение Вопроса

Чтобы скопировать только.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} 
# 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()
</target_file_dir:mytarget>
lt;target_file_dir:mytarget>) endforeach() </target_file_dir:mytarget>

Это'аналогичный процесс, чтобы получить все файлы не в.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}
                              
# 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()
</target_file_dir:mytarget>
lt;target_file_dir:mytarget>) endforeach() </target_file_dir:mytarget>
 Praveer Kumar28 нояб. 2018 г., 08:44
Это также будет работать для подкаталога?
 Fraser18 нояб. 2012 г., 13:02
@Meysam Хороший звонок - яуточню ответ.
 Fraser18 нояб. 2012 г., 12:32
@Meysam Нет проблем :-)
 Meysam18 нояб. 2012 г., 12:26
Большое спасибо!
 Meysam18 нояб. 2012 г., 12:57
Вместо слияния списка файлов, кажется, чтоможно записать все типы файлов в одну строку.
 Fraser23 янв. 2013 г., 09:10
Я только что видел этот комментарий сейчас и ужеответил здесь :-)
 Fraser15 янв. 2015 г., 01:41
@ Ник Лучше всего задать новый вопрос - этослишком много для комментариев.
 Nick15 янв. 2015 г., 01:25
У меня та же проблема, но мне нужно ГЛОБ после сборки. Как это сделать?
 Meysam23 янв. 2013 г., 07:31
Возможно ли иметь цель для копирования файлов без компиляции? Что-то вроде "сделать копию " который только копирует файлы конфигурации.

Ваш ответ на вопрос