CMake规则复制多个具有相同名称的文件之一

时间:2018-06-18 02:32:48

标签: cmake

我们假设我们有一个这样的项目:

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;已有自定义规则。

我明白为什么会收到错误,但我想不出任何方法可以做我想做的事。

0 个答案:

没有答案