如何在CMAKE和CLION中的每次构建后运行复制脚本? [重复]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在CMAKE和CLION中的每次构建后运行复制脚本? [重复]相关的知识,希望对你有一定的参考价值。
这个问题在这里已有答案:
我每次构建项目时都会在构建项目后尝试复制文件目录。
在我的项目的CMakeLists.txt
文件中,我有以下内容:
# Copy resources
file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/assets DESTINATION ${PROJECT_BUILD_DIR}/)
这是在第一次构建项目时工作,并且它可以随时在CMAKE生成makefile的目录中调用make
。
但是,在我的IDE(CLion)中,我认为存在某种缓存/检查以查看项目是否已构建。
因此,如果我只更改资产文件而不更改底层代码,则永远不会将文件复制到二进制文件的位置。
有没有办法在每次调用构建后强制执行构建后脚本?
或者,换句话说,有没有办法强制CMakeLists.txt
文件每次我建立我的项目?
这是CLion特有的,但更普遍地关注cmake。
我正在使用CMAKE 3.9.1
谢谢
文件(COPY文件路径)在配置时执行,CMake流程的三个主要阶段之一配置 - >构建 - >安装
如果要在构建后执行命令,有两种方法可以执行此操作。
首先(可能是更好的)
add_custom_command(TARGET MyTarget POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/assets $<TARGET_FILE_DIR:MyTarget>/assets)
将资产目录复制到artifactDirectory / assets。您需要精确目标中的assets目录。 CMake文档在这一点上并不清楚
copy_directory ...将目录复制到目录。如果目录不存在,则将创建该目录。
参考是:add_custom_command (3.9.6)
其次是在每个目标的构建结束时执行的自定义目标,因此取决于所有目标。
语法就是
add_custom_target( MyTarget ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/assets $<TARGET_FILE_DIR:MyTarget>/assets DEPENDS MyOtherTargets)`
将创建一个名为MyTarget的目标执行,在构建/生成目标或其所依赖的文件之后构建的命令。
(当构建具有多个核心的项目时,此命令会有一些意外行为。)
有关信息,我的环境是CLION 2017.3和CMake 3.10
以上是关于如何在CMAKE和CLION中的每次构建后运行复制脚本? [重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何在 CMake 中构建过程后复制目标的所有运行时依赖项?
如何让 JetBrains CLion 中的“cmake”工作来编译 Emscripten/WebAssembly?