2012-11-18 16 views
6

Tôi đang sử dụng lệnh tùy chỉnh sau để sao chép tất cả các tệp trong thư mục config vào thư mục build. Vấn đề là tôi không muốn thư mục .svn cũng được sao chép. Tôi đang tìm cách loại trừ thư mục .svn hoặc để sao chép tệp có tiện ích mở rộng cụ thể. ví dụ. Tôi chỉ muốn các tệp có các tiện ích mở rộng xml hoặc conf được sao chép. Tôi nên làm gì?CMake: Cách chỉ sao chép các phần mở rộng tệp cụ thể từ một thư mục này sang một số khác

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

related question

Trả lời

10

Để sao chép chỉ các tập tin .xml.conf, bạn có thể sử dụng file(GLOB ...) lệnh:

# 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() 

Đó là một quá trình tương tự để có được tất cả các file không có trong .svn thư mục con:

# 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() 
+0

Hơn k bạn rất nhiều! – Meysam

+0

@Meysam Không có vấn đề :-) – Fraser

+0

Thay vì hợp nhất danh sách tệp, có vẻ như có thể viết tất cả các loại tệp trong một dòng. – Meysam

Các vấn đề liên quan