cmake(三十五)Cmake之include指令

本文详细解析了CMakeLists.txt与cmake脚本之间的联系与区别,包括它们的应用场景、如何正确地使用include指令加载不同类型的文件,以及与add_subdirectory和find_package指令的区别。

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

一    CMakeLists.txtcmake脚本联系和区别

①    cmake脚本

(1)  cmake文件里面通常是'什么信息(information)'

--  '.cmake文件'里包含了一些"公共(复用)"的'cmake命令'和一些'宏|函数'

--  当CMakeLists.txt'包含该.cmake文件'时,当'编译'运行时,该.cmake里的一些命令就会在该'包含处'得到加载'执行',在'后续'能够'调用该.cmake里'的一些宏和函数

-- .cmake文件是一个'模块(module)文件',可以被'include'到CMakeLists.txt中

备注: cmake'脚本'不要包含'工程之类'的信息 -->例如:add_subdirectory()、CMAKE_CURRENT_之类的

最佳实践: cmake'不要'调用CMakeLists.txt

(2) .cmake模块文件被'加载的时机' -->'CMakeLists.txt'

-- @1: include(module_name.|file)

-- @2: find_package(module_name)

备注: 这两种'加载'方式有'区别'的,或者说find_package中'.cmake全文件名'有一定的要求

②    CMakeLists.txt

(1)  CmakeLists.txt才是cmake的'正统'文件

(2)  执行cmake 命令时候,会'自动加载'对应'路径'下的CMakeLists.txt文件-->'一般时项目根路经下'

eg: cmake .. -->加载'上级目录下'的CMakeLists.txt文件 -->'out of build常见的场景'

(3) CMakeLists.txt通过'add_subdirectory(dir)' -->'自动加载'该目录下的'CMakeLists.txt'文件

二    include指令

应用场景

(1)基础

①    官方帮助文档

+++++++++++'普通(file)文件'+++++++++++

1)如果是'相对'路径,是'相对于'include指令所在的'CMakeLists.txt'的路径

2)'绝对'路径-->'建议'

一般我们会将'cmake'文件放到cmake目录下,所以'前缀'一般是: CMAKE_CURRENT_SOURCE_DIR/cmake/

备注: 这里的'file'文件,必须以'.cmake'结尾

+++++++++++'模块(module)文件'+++++++++++

1)首先搜索'Cmake builtin module directory' -->'cmake 内置的module目录'-->'centos7 /usr/share/cmake/MOdules/'

2)找不到'再搜索'-->'CMAKE_MODULE_PATH'

3)再找不到,则'报错'-->'NOTFOUND'

强调:如果非'.cmake'结尾的文件表示是'module'-->会自动查找'内建-->CMAKE_MODULE_PATH'路径下的"module_name.cmake"文件

CMP0017

②    include和add_subdirectory的区别

参考博客

include(src/CMakeLists.txt) -->cmake也可以这样做,但是相对'add_subdirectory(src)',我们'不推荐'前者

原因: include破坏了'Build Tree'的机制-->不能将'Source Tree'在'build'下'映射'成'Build Tree'

find_package和include的区别

(2)实践

①    项目结构

②    CMakeLists.txt文件

③    测试

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值