Copy file from source directory to binary directory using CMake

后端 未结 8 1816
佛祖请我去吃肉
佛祖请我去吃肉 2020-11-28 03:37

I\'m trying to create a simple project on CLion. It uses CMake (I\'m new here) to generate Makefiles to build project (or some sort of it)

All I need to is transfer

相关标签:
8条回答
  • 2020-11-28 04:17

    both option are valid and targeting two different steps of your build:

    1. file(COPY ... copies the file in configuration step and only in this step. When you rebuild your project without having changed your cmake configuration, this command won't be executed.
    2. add_custom_command is the preferred choice when you want to copy the file around on each build step.

    The right version for your task would be:

    add_custom_command(
            TARGET foo POST_BUILD
            COMMAND ${CMAKE_COMMAND} -E copy
                    ${CMAKE_SOURCE_DIR}/test/input.txt
                    ${CMAKE_CURRENT_BINARY_DIR}/input.txt)
    

    you can choose between PRE_BUILD, PRE_LINK, POST_BUILD best is you read the documentation of add_custom_command

    an example on how to use the first version can be found here: Use CMake add_custom_command to generate source for another target

    0 讨论(0)
  • 2020-11-28 04:21

    The first of option you tried doesn't work for two reasons.

    First, you forgot to close the parenthesis.

    Second, the DESTINATION should be a directory, not a file name. Assuming that you closed the parenthesis, the file would end up in a folder called input.txt.

    To make it work, just change it to

    file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/input.txt
         DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
    
    0 讨论(0)
  • 2020-11-28 04:24

    If you want to put the content of example into install folder after build:

    code/
      src/
      example/
      CMakeLists.txt
    

    try add the following to your CMakeLists.txt:

    install(DIRECTORY example/ DESTINATION example)
    
    0 讨论(0)
  • 2020-11-28 04:26

    This is what I used to copy some resource files: the copy-files is an empty target to ignore errors

     add_custom_target(copy-files ALL
        COMMAND ${CMAKE_COMMAND} -E copy_directory
        ${CMAKE_BINARY_DIR}/SOURCEDIRECTORY
        ${CMAKE_BINARY_DIR}/DESTINATIONDIRECTORY
        )
    
    0 讨论(0)
  • 2020-11-28 04:26

    if you want to copy folder from currant directory to binary (build folder) folder

    file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/yourFolder/ DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/yourFolder/)
    

    then the syntexe is :

    file(COPY pathSource DESTINATION pathDistination)
    
    0 讨论(0)
  • 2020-11-28 04:35

    You may consider using configure_file with the COPYONLY option:

    configure_file(<input> <output> COPYONLY)
    

    Unlike file(COPY ...) it creates a file-level dependency between input and output, that is:

    If the input file is modified the build system will re-run CMake to re-configure the file and generate the build system again.

    0 讨论(0)
提交回复
热议问题