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

CMake如何设置未被使用的自定义库不参与编译构建?

CMake未被依赖的库自动跳过编译的实现方法

问题原因

你通过add_library定义的目标默认会被加入CMake的默认构建目标all中,执行全量构建时默认会构建所有all包含的目标,和该库是否被其他目标链接没有关系,所以删除链接语句后库仍然会被编译。

实现方案

你可以在定义库的时候添加EXCLUDE_FROM_ALL参数即可实现需求,语法如下:

add_library(network_transport EXCLUDE_FROM_ALL
    # 此处替换为你实际的库源文件路径
    src/transport.cpp
    src/connect.cpp
    include/transport.h
)
  • 加了该参数后,该库默认不会被加入all目标,只有当有其他被构建的目标显式依赖/链接该库时,CMake才会自动触发该库的编译流程
  • 如果你需要单独构建这个库(比如调试库本身功能),直接指定构建该目标即可,比如Makefile生成器下执行make network_transport,IDE中选中对应目标单独构建即可

注意事项

  • 如果你使用Visual Studio等多配置生成器,可以配合CMake 3.19以上版本的EXCLUDE_FROM_DEFAULT_BUILD参数使用,效果和EXCLUDE_FROM_ALL在单配置生成器下的表现一致
  • 不要给最终要打包发布的库加该参数,否则执行安装流程时可能找不到对应的库产物

内容的提问来源于stack exchange,提问作者Олег Привалов

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 20:36:01