CMake:将文件从build目录复制到source directoy

时间:2017-08-03 06:24:56

标签: c++ cmake qt-creator

我的C ++ - 程序读取和写入文件。要将输入文件从源目录复制到构建目录,我需要在CMakeLists.txt中使用此行:

configure_file(<input> <output> COPYONLY)

作为一个积极的副作用,QtCreator会在项目视图中列出文件。

有没有办法自动将文件从build目录复制到source directy ,这样我就可以在源代码中获得更新的输出文件,并列在QtCreator的项目视图中?

1 个答案:

答案 0 :(得分:2)

如果您对此感到满意,可以使用与绝对路径相同的命令:

configure_file(${CMAKE_BINARY_DIR}/<path>/<input> ${CMAKE_SOURCE_DIR}/<path>/<output> COPYONLY)

CMAKE_BINARY_DIR的位置:

  

[...]当前CMake构建树顶级的完整路径。

虽然CMAKE_SOURCE_DIR是:

  

[...]当前CMake源树顶层的完整路径。

根据documentationconfigure_file只有当它们是相对路径时才会以自定义方式<input><output>处理,否则会直接使用它们。
换句话说:

  • <input>是一个文件名,其中包含:

      

    相对于CMAKE_CURRENT_SOURCE_DIR的值处理相对路径。

    绝对路径只是按原样使用。

  • <output>是一个文件名或目录:

      

    相对于CMAKE_CURRENT_BINARY_DIR的值处理相对路径。

    绝对路径只是按原样使用。

您可以使用的另一种可能方法是依赖file命令及其(我说)COPY版本。从文档中可以看出:

  

COPY签名将文件,目录和符号链接复制到目标文件夹。相对于当前源目录评估相对输入路径,并且相对于当前构建目录评估相对目的地。复制会保留输入文件时间戳,并在目标中存在具有相同时间戳的文件时对其进行优化。除非给出显式权限或NO_SOURCE_PERMISSIONS,否则复制将保留输入权限(默认为USE_SOURCE_PERMISSIONS)。

显然,绝对路径可以像configure_file一样直接使用,并且它们保持不变。相对路径的处理方式不同,通常使用cmake