【问题标题】:CMake "FILES_MATCHING_PATTERN" copies empty directoriesCMake“FILES_MATCHING_PATTERN”复制空目录
【发布时间】:2019-04-01 08:42:11
【问题描述】:

我使用带有以下安装命令的 CMakeLists.txt:

install(DIRECTORY ./ DESTINATION include FILES_MATCHING PATTERN "*.h")

它正确安装了所有“./*.h”文件,但也复制了“./.git”目录结构(没有任何文件)。

使用 CMake 3.14.0 时会出现此问题,而使用 CMake 3.11.1 时不会出现此问题。

命令是否更改或者这是一个 CMake 错误?我应该对“.git”使用显式排除,还是可以以某种方式保留白名单方法,例如在我确实需要安装子文件夹时继续工作吗?

【问题讨论】:

    标签: cmake


    【解决方案1】:

    到目前为止,除了明确指定排除您的目录之外,似乎不存在任何直接的解决方案。这种行为对于 3.14.0 版本来说并不新鲜,在 3.11.1 中也类似。您的 .git 目录未被复制的事实可能是由于您的 CMakeLists 中的另一个命令...
    正如您建议并基于旧 CMake 论坛中的 this postthis thread,您的解决方案是:

    install(DIRECTORY ./ DESTINATION include FILES_MATCHING PATTERN "*.h" PATTERN ".git*" EXCLUDE)
    

    有一个ticket添加了一个功能,在使用install(DIRECTORY ...)时不包含空目录,所以你可能会留意它最终何时实现。

    或者,您可以使用嵌套的file(GLOB ...),后跟install(FILES ...),具有通配的固有缺点(请参阅文档中的note)。

    【讨论】:

      猜你喜欢
      • 2021-09-27
      • 2014-07-06
      • 1970-01-01
      • 2016-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多