clion在每个构建上运行cmake

clion run cmake on each build

本文关键字:运行 cmake 构建 clion      更新时间:2023-10-16

我不确定用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内部处理这一切,而不是回到终端运行cmake命令以使更新生效。

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

# 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})

注意,在添加/删除文件的情况下,应该显式地运行cmake。这就是为什么硬编码文件列表优先于GLOBing.