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



我想在一个目录下安装所有的头文件。

我知道正则表达式可以做到这一点。但我在谷歌上搜索了很多,没有找到如何将这三种文件包含在一起。

我使用了这样的命令:

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

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

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

globbing表达式不是正则表达式;您需要使用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);这也允许您使用regex而不是globbing表达式:

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

最新更新