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

CMake使用include_directory添加路径时如何排除不需要的目录?

可行解决方案

方案1:直接指定需要引入的目录(优先推荐)

无需引入整个app根目录,直接将你实际用到的头文件目录加入搜索路径即可,从根源避免引入无关目录:

include_directories(app/appSrc)

该方案下build、compile、docs等目录完全不会被纳入头文件搜索范围,IDE也不会对这些目录做额外扫描,不会影响自动补全效率。

方案2:必须保留根目录引入时的适配方案

如果项目中已经大量使用不带appSrc前缀的头文件引用,修改引用成本过高,必须保留include_directories(app)的配置,可以通过属性设置屏蔽无关目录的IDE扫描:

  • 对CMake 3.18及以上版本,可以给无关目录设置EXCLUDE_FROM_INDEX属性,主流IDE(CLion、Qt Creator等)识别到该属性后不会将目录纳入索引扫描范围:
    set_property(DIRECTORY app/build PROPERTY EXCLUDE_FROM_INDEX TRUE)
    set_property(DIRECTORY app/compile PROPERTY EXCLUDE_FROM_INDEX TRUE)
    set_property(DIRECTORY app/docs PROPERTY EXCLUDE_FROM_INDEX TRUE)
    
  • 对旧版本CMake或者不支持上述属性的IDE,可以将无关目录标记为二进制输出目录,绝大多数IDE默认不会扫描二进制目录的头文件:
    set_property(DIRECTORY app/build PROPERTY BINARY_DIR ON)
    set_property(DIRECTORY app/compile PROPERTY BINARY_DIR ON)
    

方案3:动态过滤生成合法搜索路径

如果需要批量引入appSrc下的多层子目录,可以用文件搜索逻辑过滤掉无关目录后批量添加:

# 搜索app下所有子目录,过滤掉无关目录
file(GLOB_RECURSE ALL_SUBDIRS LIST_DIRECTORIES true app/*)
set(VALID_INCLUDE_DIRS "")
foreach(DIR ${ALL_SUBDIRS})
    if(IS_DIRECTORY ${DIR} AND NOT DIR MATCHES "app/(build|compile|docs)(/.*)?$")
        list(APPEND VALID_INCLUDE_DIRS ${DIR})
    endif()
endforeach()
include_directories(${VALID_INCLUDE_DIRS})

注意该方案在目录结构发生变动时,需要重新运行CMake才能生效。

内容的提问来源于stack exchange,提问作者Dariusz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 20:45:03