我正在尝试在构建项目后复制文件目录,我的项目构建的每个时间。
在我的项目的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
由于
答案 0 :(得分: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的目标,该目标在构建/生成目标或其所依赖的文件之后构建时执行。
(在构建项目时,此命令会有一些意外行为,具有多个核心。)
有关信息,我的环境是CLION 2017.3和CMake 3.10