008.CMake子目录项目

本文详细介绍了CMake中add_subdirectory()命令的使用,包括命令格式、相关变量、作用域以及include()命令的两种形式。add_subdirectory()用于将其他目录引入生成树,创建新的作用域以保持隔离。include()命令则有两种形式,一种类似add_subdirectory()但不引入新作用域,另一种用于加载模块。同时,文章提到了return()命令在结束当前文件处理中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


对于简单的项目,使用单个文件夹是可以的,但复杂项目往往要按照模块进行拆分,这就需要划分不同的子目录。CMake提供了两种机制来实现这一目标,一个是add_subdirectory()命令,一个是include()命令。这两个命令有很大的区别,一定要仔细区别。

add_subdirectory()命令

add_subdirectory()命令允许项目将另一个目录引入到生成树中。该目录必须有自己的CMakeLists.txt文件,该文件将在调用add_subdirectory()命令时进行处理,并在项目的生成树中为其创建相应的目录。其命令格式为:

add_subdirectory(sourceDir [ binaryDir ] [ EXCLUDE_FROM_ALL ])

其中的sourceDir不必是根源码目录的子目录,尽管通常是这个样子,但实际上可以添加任何目录,sourceDir被指定为绝对路径或相对路径,相对于当前源码目录。只有在添加主源码树之外的目录时,才需要绝对路径。

一般情况下,不需要指定binaryDir。CMake会在生成树中创建一个与sourceDir同名的目录。如果sourceDir是源树之外的路径,那么CMake要求指定binaryDir。

EXCLUDE_FROM_ALL是可选的,控制该子目录定义的构建目标是否添加到all目标中。前面已经提到过很多次了。区别在于有本书上说这个特性对于某些CMake版本或者目标平台,可能会出问题,语焉不详,稍作留心即可。

相关变量

有时,开发人员需要知道与当前源码目录对应的生成目录的位置,例如在运行时复制所需的文件或执行自定义生成任务时。CMake提供了许多变量,用于跟踪当前正在处理的CMakeLists.txt文件的源目录和构建目录。当CMake处理每个文件时,以下几个只读变量将自动更新。它们总是包含绝对路径。

CMAKE_SOURCE_DIR:

源码树的最顶层目录(即主CMakeLists.txt文件位于的位置)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

温铜

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

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

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

打赏作者

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

抵扣说明:

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

余额充值