CMake的“ FILES_MATCHING_PATTERN”复制空目录

时间:2019-04-01 08:42:11

标签: cmake

我通过以下安装命令使用CMakeLists.txt:

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

它会正确安装所有“ ./*.h”文件,但还会复制“ ./.git”目录结构(不包含任何文件)。

使用CMake 3.14.0时会发生此问题,而使用CMake 3.11.1时不会发生。

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

1 个答案:

答案 0 :(得分: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)。