clion在每个构建上运行cmake

时间:2015-08-05 15:38:41

标签: c++ c cmake clion

我不确定是否可以用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命令以使更新生效。

1 个答案:

答案 0 :(得分:1)

如果您希望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})

请注意,在添加/删除文件的情况下,您应该明确地运行cmake。这就是为什么硬编码文件列表优先于GLOB ing。