我们假设我们有一个这样的项目:
foo
+-bar
+ +-header.h <-- copy if updated
+-baz
+ +-header.h <-- copy if updated
+-wibble
+ +-ni
+ +-header.h <-- copy if updated
target
+-header.h <-- to here
header.h
有三个可能的候选人,但最后一个位置;我们没有为原因使用符号链接。请注意,实际上大约有350个头文件,只有几个重复项,因此单独列出每个都很麻烦,特别是如果这些子目录更新其头文件。目前,我们这样做无条件复制:
file(glob_recurse HEADERS foo/*.h)
file(COPY ${HEADERS} DESTINATION target)
但是,此规则仅在我们进行CMake重建时运行,而不是仅在头文件发生更改时运行,因此我希望单独更改头文件。
现在,looking at this answer我尝试这样的事情:
file(glob_recurse HEADERS foo/*.h)
foreach(file_i ${HEADERS})
get_filename_component(barename, ${file_i} NAME)
add_custom_command(
OUTPUT target/${barename}
COMMAND ${CMAKE_COMMAND}
ARGS -E copy ${file_i} target
)
endforeach( file_i )
然而,CMake抱怨错误:
CMake错误:尝试将自定义规则添加到输出&#34; target / header.h&#34;已有自定义规则。
我明白为什么会收到错误,但我想不出任何方法可以做我想做的事。