如何使用正则表达式在 cmake 中包含带有后缀(.h、.hpp 和 .hxx)的文件?

how to use regular expression to include file with postfix (.h, .hpp and .hxx) in cmake?

我想把所有的头文件安装到一个目录下

我知道正则表达式可以做到这一点。但是我做了很多google,没找到如何将这三种文件放在一起。

我使用了这样的命令:

file(GLOB INFRA ${LOCAL_SRC_PATH}/infra/*.h[|p|x][|p|x])

使INFRA变量保存所有头文件,但我发现它忽略了.h

我知道这很容易,你能帮忙吗?

通配表达式不是正则表达式;您需要使用 3 个单独的命令来匹配 .h.hpp.hxx 文件。即使作为正则表达式,这也会失败,因为字符组匹配字符 |px,但它们不匹配空字符串。

在这种情况下,您可能会使用

set(PATH_PREFIX "${LOCAL_SRC_PATH}/infra/*")
file(GLOB INFRA_H "${PATH_PREFIX}.h")
file(GLOB INFRA_HPP "${PATH_PREFIX}.hpp")
file(GLOB INFRA_HXX "${PATH_PREFIX}.hxx")

set(INFRA ${INFRA_H} ${INFRA_HPP} ${INFRA_HXX})

在这种情况下,我建议使用 install(DIRECTORY);这也允许您使用正则表达式而不是通配表达式:

install(DIRECTORY "${LOCAL_SRC_PATH}/infra"
        TYPE INCLUDE
        FILES_MATCHING REGEX ".*\.(h|hpp|hxx)")