clion 运行 cmake 每次构建

clion run cmake on each build

我不确定是否可以使用 clion 执行此操作,我正在测试该程序并喜欢用它来编写 C 代码,因为 ctags 和 etags 支持非常好。

我正在将一些文件从 cmake 源代码树复制到每个构建的 bin 位置。在使用 clion 时,如果我更新我正在复制的一些文件,结果不会在 clion 中更新。

如果我转而返回终端,只是 运行 典型的 cmake 步骤

cmake ../ && make && bin/./program

复制更新的文件,我可以看到我的结果。

这是我在构建中使用的 CMake 命令。

FILE(COPY ${CMAKE_CURRENT_SOURCE_DIR}/resources/ DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/bin/resources/)

我也许能够重组 cmake 命令以使其每次都复制,或者这可能只是一个 clion 问题。我不确定并且希望能够在 clion 中处理这一切,而不是回到终端 运行 cmake 命令以使更新生效。

如果您希望 CMake 在某些文件更改时执行某些操作,您应该使用 add_custom_command 创建规则并通过 DEPENDS 参数传递文件。请注意,CMake 仅支持文件级依赖项,对于目录的依赖项,您需要列出其中的所有文件。

# Collect list of files within directory.
FILES(GLOB files_list RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/resources/
    "${CMAKE_CURRENT_SOURCE_DIR}/resources/*") 
# This will contain full paths to files in binary directory. 
set(binary_files_list)
foreach(file ${files_list})
    set(source_file ${CMAKE_CURRENT_SOURCE_DIR}/resources/${file})
    set(binary_file ${CMAKE_CURRENT_BINARY_DIR}/bin/resources/${file})
    add_custom_command(OUTPUT ${binary_file}
        COMMAND cmake -E ${source_file} ${binary_file}
        DEPENDS ${source_file})
    list(APPEND binary_files_list ${binary_file})
endforeach()
add_custom_target(resources DEPENDS ${binary_files_list})

请注意,如果是 adding/removing 个文件,您应该明确地 运行 cmake。这就是硬编码文件列表优于 GLOBing 的原因。