如何在CMAKE和CLION中的每次构建后运行复制脚本? [重复]

问题描述 投票:-1回答:1

这个问题在这里已有答案:

我每次构建项目时都会在构建项目后尝试复制文件目录。

在我的项目的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

谢谢

c++ cmake clion
1个回答
0
投票

文件(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的目标执行,在构建/生成目标或其所依赖的文件之后构建的命令。

(当构建具有多个核心的项目时,此命令会有一些意外行为。)

参考是:add_custom_target (3.9.6)

有关信息,我的环境是CLION 2017.3和CMake 3.10

© www.soinside.com 2019 - 2024. All rights reserved.