You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 21:35:09