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
。这就是硬编码文件列表优于 GLOB
ing 的原因。
我不确定是否可以使用 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
。这就是硬编码文件列表优于 GLOB
ing 的原因。