我通过以下安装命令使用CMakeLists.txt:
install(DIRECTORY ./ DESTINATION include FILES_MATCHING PATTERN "*.h")
它会正确安装所有“ ./*.h”文件,但还会复制“ ./.git”目录结构(不包含任何文件)。
使用CMake 3.14.0时会发生此问题,而使用CMake 3.11.1时不会发生。
命令是否已更改,或者这是CMake错误?我应该为“ .git”使用显式排除,还是可以以某种方式保留白名单方法,例如实际需要安装子文件夹时可以继续工作吗?
答案 0 :(得分:1)
到目前为止,似乎没有明确的解决方案,除非明确指定排除目录。该行为在3.14.0版本中并不陌生,在3.11.1中也是如此。您的.git目录未复制的事实可能是由于CMakeLists中的另一个命令...
如您所建议,并且基于旧的CMake论坛中的this post和this thread,适合您的解决方案是:
install(DIRECTORY ./ DESTINATION include FILES_MATCHING PATTERN "*.h" PATTERN ".git*" EXCLUDE)
有一个ticket添加了一个功能,在使用install(DIRECTORY ...)
时不包含空目录,因此您可以留意最后实现该功能的时间。
或者,您可以使用嵌套file(GLOB ...)
和后跟install(FILES ...)
的方法,但存在内在的缺陷(请参见文档中的note)。