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

如何在CMake中使用EXCLUDE_FROM_ALL属性?

CMake EXCLUDE_FROM_ALL 属性用法说明

核心作用

EXCLUDE_FROM_ALL 是作用于CMake目标(库、可执行文件、自定义目标等)的布尔属性,核心效果是标记目标默认不参与全局构建流程:

  • 日常执行全局构建命令(如make、ninja、点击IDE「全部构建」按钮)时,带该属性的目标不会被编译、链接生成产物
  • 只有当你主动显式指定构建该目标(如执行make your_target_name、IDE中单独选中目标构建)时,才会生成对应的产物

这个属性通常用于标记测试工具、示例程序、可选插件等不需要每次全量构建都生成的目标,能大幅减少日常开发的构建耗时。

不同构建指令中的用法

1. add_library 用法

你给出的示例就是标准写法,直接在add_library参数中加入EXCLUDE_FROM_ALL即可开启属性:

add_library(foo STATIC EXCLUDE_FROM_ALL "src/foo.cpp")

等效于创建目标后单独设置属性的写法:

add_library(foo STATIC "src/foo.cpp")
set_target_properties(foo PROPERTIES EXCLUDE_FROM_ALL TRUE)

2. add_executable 用法

和库的用法完全一致,直接在参数中添加标识即可,比如定义一个默认不构建的调试工具:

add_executable(debug_helper EXCLUDE_FROM_ALL "tools/debug.cpp")

3. 其他目标类型用法

该属性支持所有CMake目标类型,包括add_custom_target,写法规则相同。

注意事项

  • 如果标记了EXCLUDE_FROM_ALL的目标,被另一个未标记该属性的普通目标依赖,CMake会自动将该目标纳入全局构建流程,因为要满足依赖项的编译要求,该属性不会屏蔽依赖传递的构建规则。
  • 若需要临时关闭某个目标的该属性,将属性值设为FALSE即可:
    set_target_properties(foo PROPERTIES EXCLUDE_FROM_ALL FALSE)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 21:54:02