CMake: How to have a target for copying files

前端 未结 1 1085
鱼传尺愫
鱼传尺愫 2020-12-08 23:28

I am using the following command to copy config files into the build directory after each compile.

# Gather list of all .xml and .conf files in \"/config\"
         


        
相关标签:
1条回答
  • 2020-12-09 00:04

    You should be able to add a new custom target called copy and make that the target of your custom commands:

    file(GLOB ConfigFiles ${CMAKE_SOURCE_DIR}/config/*.xml
                          ${CMAKE_SOURCE_DIR}/config/*.conf)
    
    add_custom_target(copy)
    foreach(ConfigFile ${ConfigFiles})
      add_custom_command(TARGET copy PRE_BUILD
                         COMMAND ${CMAKE_COMMAND} -E
                             copy ${ConfigFile} $<TARGET_FILE_DIR:MyTarget>)
    endforeach()
    

    Now the custom commands will only execute if you build copy.

    If you want to keep this copy target as a dependency of MyTarget so that you can either just copy the files or have them copied if you build MyTarget, you'll need to break the cyclic dependency. (MyTarget depends on copy, but copy depends on MyTarget to get the location of the copy-to directory).

    To do this, you can resort to the old-fashioned way of getting a target's output directory:

    add_custom_target(copy)
    get_target_property(MyTargetLocation MyTarget LOCATION)
    get_filename_component(MyTargetDir ${MyTargetLocation} PATH)
    foreach(ConfigFile ${ConfigFiles})
      add_custom_command(TARGET copy PRE_BUILD
                         COMMAND ${CMAKE_COMMAND} -E
                             copy ${ConfigFile} ${MyTargetDir})
    endforeach()
    add_dependencies(MyTarget copy)
    
    0 讨论(0)
提交回复
热议问题