我的C ++ - 程序读取和写入文件。要将输入文件从源目录复制到构建目录,我需要在CMakeLists.txt中使用此行:
configure_file(<input> <output> COPYONLY)
作为一个积极的副作用,QtCreator会在项目视图中列出文件。
有没有办法自动将文件从build目录复制到source directy ,这样我就可以在源代码中获得更新的输出文件,并列在QtCreator的项目视图中?
答案 0 :(得分:2)
如果您对此感到满意,可以使用与绝对路径相同的命令:
configure_file(${CMAKE_BINARY_DIR}/<path>/<input> ${CMAKE_SOURCE_DIR}/<path>/<output> COPYONLY)
CMAKE_BINARY_DIR
的位置:
[...]当前CMake构建树顶级的完整路径。
虽然CMAKE_SOURCE_DIR
是:
[...]当前CMake源树顶层的完整路径。
根据documentation,configure_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
。