How to copy contents of a directory into build directory after make with CMake?

前端 未结 4 1949
北海茫月
北海茫月 2020-11-27 13:15

I\'ve got some config files (xml, ini, ...) in the config directory next to the source files. How can I copy all the files in the config directory into the buil

相关标签:
4条回答
  • 2020-11-27 13:39

    CMake supports a shell type file copy. This link should be helpful for you - How to copy directory from source tree to binary tree?

    0 讨论(0)
  • 2020-11-27 13:43

    In addition to the top answer,

    To copy the directory itself instead of the contents, you can add /${FOLDER_NAME} to the end of the second parameter.

    Like this:

    add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
                       COMMAND ${CMAKE_COMMAND} -E copy_directory
                           ${CMAKE_SOURCE_DIR}/config $<TARGET_FILE_DIR:${PROJECT_NAME}>/config)
    
    0 讨论(0)
  • 2020-11-27 13:48

    In my project i use INSTALL to specify in CMake, what and where i move my binary with conf file. After execution of cmake, use "make install".

    0 讨论(0)
  • 2020-11-27 13:51

    You can use add_custom_command.

    Say your target is called MyTarget, then you can do this:

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

    This executes every time you build MyTarget and copies the contents of "/config" into the directory where the target exe/lib will end up.

    As Mark Lakata points out in a comment below, replacing PRE_BUILD with POST_BUILD in the add_custom_command ensures that copying will only happen if the build succeeds.

    Explanation

    • ${CMAKE_COMMAND} is the path to CMake
    • -E makes CMake run commands instead of building
    • copy_directory is a Command-Line Tool
    • config is the directory (that falls under the root of the project) who's contents will be copied into the build target
    • $<TARGET_FILE_DIR:MyTarget> is a generator expression, described in the add_custom_command documentation.
    0 讨论(0)
提交回复
热议问题