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

CMake内部目标是什么?其包含哪些可用类型?

关于CMake的“内部目标类型”解答

首先得明确:CMake里的内部目标类型,指的是那些不是用户通过常规的add_executable/add_library命令直接创建、而是CMake自身在构建流程中生成(或者允许用户创建但本质是服务于内部逻辑)的特殊目标类型。这类目标通常用来处理依赖管理、辅助构建任务或者实现一些抽象逻辑,官方文档没专门列全是因为它们更多是CMake内部实现的一部分,部分类型还可能随版本迭代有所调整。

常见的内部目标类型主要有这些:

  • UTILITY:这是最常见的内部类型之一,用add_custom_target创建的目标默认就是这个类型。它不生成二进制产物,主要用来执行自定义脚本、运行命令或者完成打包、文档生成这类辅助构建任务。
  • INTERFACE_LIBRARY:虽然你可以用add_library(xxx INTERFACE)手动创建,但它本质是个“虚拟库”——不编译任何代码,只用来传递编译选项、头文件路径、依赖库等信息给关联的目标,属于CMake用来实现依赖传递逻辑的内部类型。
  • OBJECT_LIBRARY:用来编译一组对象文件但不链接成库,用户可以通过add_library(xxx OBJECT)创建,CMake内部会把它当作特殊的目标类型处理,方便在多个目标间复用编译好的对象文件。
  • ALIAS:通过add_library(xxx ALIAS yyy)创建的别名目标,它本身不生成任何产物,只是作为另一个目标的“快捷方式”,CMake内部用它来简化目标引用逻辑。
  • 导入类目标:比如IMPORTED_EXECUTABLE、IMPORTED_STATIC_LIBRARY这类,当你用find_package导入外部预构建的库或可执行文件时,CMake会创建这类内部目标来管理外部依赖的信息。

另外要注意,这些内部类型大多是只读属性,你没法直接修改一个目标的类型,只能通过对应的CMake命令来创建对应类型的目标,或者在脚本中通过get_target_property来判断目标类型做逻辑分支处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:28:30