如何使用正则表达式在 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
文件。即使作为正则表达式,这也会失败,因为字符组匹配字符 |
、p
和 x
,但它们不匹配空字符串。
在这种情况下,您可能会使用
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)")
我想把所有的头文件安装到一个目录下
我知道正则表达式可以做到这一点。但是我做了很多google,没找到如何将这三种文件放在一起。
我使用了这样的命令:
file(GLOB INFRA ${LOCAL_SRC_PATH}/infra/*.h[|p|x][|p|x])
使INFRA
变量保存所有头文件,但我发现它忽略了.h
我知道这很容易,你能帮忙吗?
通配表达式不是正则表达式;您需要使用 3 个单独的命令来匹配 .h
、.hpp
和 .hxx
文件。即使作为正则表达式,这也会失败,因为字符组匹配字符 |
、p
和 x
,但它们不匹配空字符串。
在这种情况下,您可能会使用
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)")