我的C++ - 程序读取和写入文件。已经从源代码目录复制建目录需要的地方,我用这条线中的CMakeLists.txt输入文件:CMake:将文件从build目录复制到源代码中
configure_file(<input> <output> COPYONLY)
作为一个积极的副作用QtCreator列出其项目视图中的文件。
有没有办法从build目录自动将文件复制到源代码directy,以便我可以在源代码directoy中更新输出文件,并且也列在QtCreator的项目视图中?
我的C++ - 程序读取和写入文件。已经从源代码目录复制建目录需要的地方,我用这条线中的CMakeLists.txt输入文件:CMake:将文件从build目录复制到源代码中
configure_file(<input> <output> COPYONLY)
作为一个积极的副作用QtCreator列出其项目视图中的文件。
有没有办法从build目录自动将文件复制到源代码directy,以便我可以在源代码directoy中更新输出文件,并且也列在QtCreator的项目视图中?
如果你舒服,你也许可以使用相同的命令使用绝对路径:
configure_file(${CMAKE_BINARY_DIR}/<path>/<input> ${CMAKE_SOURCE_DIR}/<path>/<output> COPYONLY)
其中CMAKE_BINARY_DIR
是:
[...]的完整路径顶端当前CMake构建树的级别。
虽然CMAKE_SOURCE_DIR
是:
[...]的完整路径当前CMake的源代码树的顶层。
根据自定义的方式<input>
和<output>
只有当他们相对路径documentation,configure_file
对待,否则就直接使用它们。
在其它术语:
<input>
是针对其的文件名:
相对路径相对于CMAKE_CURRENT_SOURCE_DIR的值进行处理。
绝对路径只是照原样使用。
<output>
是文件名或针对其目录:
相对路径相对于CMAKE_CURRENT_BINARY_DIR的值进行处理。
绝对路径只是照原样使用。
你可以用另一种可能的方法是依靠file
命令和它的(让我说)COPY
版本。从文档:
COPY签名将文件,目录和符号链接复制到目标文件夹。相对于当前源目录评估相对输入路径,并且相对于当前构建目录评估相对目的地。复制可保留输入文件时间戳,并优化文件(如果文件存在于具有相同时间戳的目标)。除非给出显式权限或NO_SOURCE_PERMISSIONS,否则复制会保留输入权限(默认值为USE_SOURCE_PERMISSIONS)。
显然绝对路径可以直接使用,与configure_file
一样,并且它们保持不变。相对路径的处理方式与cmake
通常不同。
谢谢。它适用于绝对路径。唯一缺少的是qtcreator现在不列出文件。顺便说一句:使用两个'configure_file'语句同时在两个方向进行复制(source-> build和build-> source)是一个好主意。 – Sadik
为什么这是一个坏主意?无论如何,我正在给答案添加另一个可以使用的解决方案。 – skypjack
对不起,我错了。 QtCreator坠毁,但我想这是另一个原因。我用第二个'configure_file'语句再次尝试了它,现在该文件被更新并在qtcreator中列出。 – Sadik