2017-08-03 83 views
2

我的C++ - 程序读取和写入文件。已经从源代码目录复制建目录需要的地方,我用这条线中的CMakeLists.txt输入文件:CMake:将文件从build目录复制到源代码中

configure_file(<input> <output> COPYONLY) 

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

有没有办法从build目录自动将文件复制到源代码directy,以便我可以在源代码directoy中更新输出文件,并且也列在QtCreator的项目视图中?

回答

2

如果你舒服,你也许可以使用相同的命令使用绝对路径:

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

其中CMAKE_BINARY_DIR是:

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

虽然CMAKE_SOURCE_DIR是:

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

根据自定义的方式<input><output>只有当他们相对路径documentationconfigure_file对待,否则就直接使用它们。
在其它术语:

  • <input>是针对其的文件名:

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

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

  • <output>是文件名或针对其目录:

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

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


你可以用另一种可能的方法是依靠file命令和它的(让我说)COPY版本。从文档:

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

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

+0

谢谢。它适用于绝对路径。唯一缺少的是qtcreator现在不列出文件。顺便说一句:使用两个'configure_file'语句同时在两个方向进行复制(source-> build和build-> source)是一个好主意。 – Sadik

+0

为什么这是一个坏主意?无论如何,我正在给答案添加另一个可以使用的解决方案。 – skypjack

+0

对不起,我错了。 QtCreator坠毁,但我想这是另一个原因。我用第二个'configure_file'语句再次尝试了它,现在该文件被更新并在qtcreator中列出。 – Sadik

相关问题