首页 > 解决方案 > install() 与 FILES_MATCHING PATTERN 忽略模式并安装所有

问题描述

我目前install()对 CMake 的功能有疑问v3.13.4。我的代码如下:

install(
    DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
    DESTINATION ${CMAKE_INSTALL_PREFIX}
    FILES_MATCHING PATTERN "*.cfg"
)

我的理解是,CMake 会将与此模式匹配的所有文件复制到我给出的位置${CMAKE_INSTALL_PREFIX},但我当前目录中的所有子文件夹也会被复制。此外,如何将多个文件结尾模式复制到目标?简单地说*.cfg | *.xyz*.cfg || *.xyz不起作用。

编辑:

还尝试将其替换为FILES_MATCHING PATTERN

FILES_MATCHING REGEX "[a-zA-Z0-9]*.ate|[a-zA-Z0-9]*.reserved"

它只会*.reserved再次复制文件和所有文件夹。

标签: regexcmakeinstallation

解决方案


如果目录中的任何子文件夹也包含.cfg文件,CMake 也会复制这些文件。您需要使用该EXCLUDE指令明确告诉 CMake 忽略这些。此外,您可以连接多个PATTERN指令以供 CMake 搜索和安装:

install(
    DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
    DESTINATION ${CMAKE_INSTALL_PREFIX}
    FILES_MATCHING 
    PATTERN "*.cfg"
    PATTERN "*.xyz"
    PATTERN "subFolderA" EXCLUDE
)

推荐阅读