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