003.CMake构建目标初步

本文详细介绍了CMake中如何构建可执行文件目标和库目标,包括静态库、动态库和模块库。CMake的add_executable()和add_library()命令用于定义目标,并可通过选项如WIN32、MACOSX_BUNDLE和EXCLUDE_FROM_ALL进行定制。此外,文章讨论了链接目标的PRIVATE、PUBLIC和INTERFACE依赖传递,以及如何连接到非目标对象。CMake的这些功能对于管理和组织复杂项目至关重要。
摘要由CSDN通过智能技术生成


构建目标是CMake中非常重要的一个概念,所谓的现代CMake,可以认为就是所有命令都是围绕着构建目标来打转的。

前文使用的add_executable()命令,便是定义了一个可执行文件目标,除此外CMake还支持各种类型的库目标,比如静态库(Static)、动态库(shared)、模块库(modules)等,并且可以非常方便的描述这些目标之间的依赖关系,以决定后续的链接步骤。

可执行文件目标

前文已经提到,定义该类目标的命令如下:

add_executable(targetName [WIN32] [MACOSX_BUNDLE]
[EXCLUDE_FROM_ALL]
source1 [source2 ...]
)

其中targetName是必须给出的,生成的可执行文件便以此命名,而且因为现代CMake以目标和核心的描述逻辑,目标名字在很多地方都要用到。

WIN32是一个可选的选项,在Windows平台下,该选项表示目标是一个GUI程序,其程序入口会设为WinMain,而不是main;其/SUBSYSTEM选项会置为WINDOWS。这样说可能不直观,但这两个可以在VS当中设置如下图:
子系统设置
入口点
main,WinMain,这俩区别不小,但不是本文该说的,感兴趣的百度吧。这里只是想要明确,CMake的add_executable命令,可以通过设置WIN32选项达到程序入口和子系统设置的目的。

MACOSX_BUNDLE是可选的,只在Apple平台上有用,macOS,iOS等,在其他平台会忽略。因为没啥研究,不扯淡了。

EXCLUDE_FROM_ALL,顾名思义,从ALL目标中排除此项。ALL目标是自动生成的,当我们使用cmake --build命令构建却没有明确构建目标的时候,默认是构建ALL目标。设置EXCLUDE_FROM_ALL选项,则构建ALL目标的时候忽略此目标。比如前文所示的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

温铜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值