如何在CMake中按模式匹配查找文件夹并添加至CMAKE_MODULE_PATH
CMake按模式匹配文件夹并添加至CMAKE_MODULE_PATH的实现
你可以通过CMake的file(GLOB)命令实现通配符匹配目录,再将匹配结果添加到CMAKE_MODULE_PATH中,具体步骤如下:
方法一:分模式匹配(清晰直观)
先分别匹配每个前缀对应的目录,再统一加入路径列表:
# 匹配上级目录下所有以Platform_开头的文件夹 file(GLOB PLATFORM_DIR "${CMAKE_CURRENT_LIST_DIR}/../Platform_*") # 匹配上级目录下所有以Crypto_开头的文件夹 file(GLOB CRYPTO_DIR "${CMAKE_CURRENT_LIST_DIR}/../Crypto_*") # 匹配上级目录下所有以CryIf_开头的文件夹 file(GLOB CRYIF_DIR "${CMAKE_CURRENT_LIST_DIR}/../CryIf_*") # 匹配上级目录下所有以Csm_开头的文件夹 file(GLOB CSM_DIR "${CMAKE_CURRENT_LIST_DIR}/../Csm_*") # 将匹配到的目录添加至CMAKE_MODULE_PATH set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PLATFORM_DIR} ${CRYPTO_DIR} ${CRYIF_DIR} ${CSM_DIR} )
方法二:合并模式匹配(简洁高效)
把所有匹配模式合并到一个file(GLOB)命令中,一次性获取所有目标目录:
# 批量匹配所有目标前缀的文件夹 file(GLOB MODULE_DIRS "${CMAKE_CURRENT_LIST_DIR}/../Platform_*" "${CMAKE_CURRENT_LIST_DIR}/../Crypto_*" "${CMAKE_CURRENT_LIST_DIR}/../CryIf_*" "${CMAKE_CURRENT_LIST_DIR}/../Csm_*" ) # 更新CMAKE_MODULE_PATH set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${MODULE_DIRS} )
注意事项
file(GLOB)会在CMake配置阶段扫描目录并生成路径列表,若后续目录结构发生变化,需要重新运行CMake才能更新路径。- 如果同一前缀存在多个匹配目录(比如同时有
Platform_v1和Platform_v2),所有匹配到的目录都会被添加到CMAKE_MODULE_PATH中,CMake会按顺序查找模块。
内容的提问来源于stack exchange,提问作者Hà Trần Văn
相关产品推荐
相关产品推荐

