CMake入门教程【核心篇】引用子模块.cmake文件(include)

在这里插入图片描述

😈「CSDN主页」:传送门
😈「Bilibil首页」:传送门
😈「本文的内容」:CMake入门教程
😈「动动你的小手」点赞👍收藏⭐️评论📝


文章目录

  • include子模块
  • 举个例子
  • include 优先级
  • include简写
  • 组织工程技巧

include子模块

要在CMake中引用子模块的.cmake文件,可以使用include()命令。include()命令用于包含并执行指定的CMake脚本文件。

假设你的子模块文件名为submodule.cmake,位于与主CMakeLists.txt文件相同的目录中,你可以在主CMakeLists.txt文件中使用以下命令引用该子模块:

include(submodule.cmake)

如果子模块文件位于主CMakeLists.txt文件的上级目录中,你可以使用相对路径引用子模块:

include(../submodule.cmake)

如果子模块文件位于不同的目录中,你可以使用绝对路径引用子模块:

include(/path/to/submodule.cmake)

请确保在引用子模块文件之前,子模块文件已经存在,并包含了你需要的定义、函数或宏等内容。

举个例子

以下是一个简单的示例,演示如何在CMake中引用子模块的.cmake文件。

假设你有以下目录结构:

project/
  |- CMakeLists.txt
  |- submodule/
       |- submodule.cmake

首先,创建主CMakeLists.txt文件,并引用子模块文件:

cmake_minimum_required(VERSION 3.12)
project(MyProject)

# 引用子模块
include(submodule/submodule.cmake)

# 主项目的设置和构建逻辑
...

然后,在submodule目录中创建submodule.cmake文件,并在其中定义一些内容:

# submodule.cmake

# 定义一个函数
function(print_message)
    message("Hello from submodule!")
endfunction()

# 定义一个变量
set(SUBMODULE_VARIABLE "This is a submodule variable")

现在,当你构建主项目时,子模块文件将被引用并执行。你可以在主项目的构建过程中使用子模块中定义的函数和变量。例如,在主CMakeLists.txt中添加以下内容:

# 主项目的设置和构建逻辑

# 调用子模块中的函数
print_message()

# 使用子模块中的变量
message("Submodule variable: ${SUBMODULE_VARIABLE}")

当你执行CMake构建时,你将看到以下输出:

Hello from submodule!
Submodule variable: This is a submodule variable

这个例子展示了如何在CMake中引用子模块的.cmake文件,并使用子模块中定义的函数和变量。你可以根据自己的需求扩展和修改子模块文件的内容。

include 优先级

在CMake中,include()命令用于包含其他CMake脚本文件。当指定文件名时,CMake会按照特定的搜索路径来查找该文件。

CMake的搜索路径包括以下几个位置:

  1. 当前源代码目录:CMake会首先在当前源代码目录中搜索指定的文件。
  2. CMake模块路径:CMake会搜索预定义的模块路径,这些路径包括CMake的安装路径、系统级的CMake模块路径以及用户自定义的CMake模块路径。可以通过设置CMAKE_MODULE_PATH变量来添加自定义的CMake模块路径。
  3. 环境变量:CMake还会搜索名为CMAKE_INCLUDE_PATH的环境变量中指定的路径。
  4. 系统默认路径:CMake会搜索系统默认的CMake模块路径,这些路径包括操作系统特定的CMake模块目录。

如果要引用一个子模块中的文件,可以在include()命令中使用相对路径或绝对路径来指定文件的位置。例如:

include(submodule/file.cmake)
include(/path/to/submodule/file.cmake)

这样可以明确指定要包含的文件的位置,而不依赖于搜索路径。

总之,CMake会按照上述搜索路径的顺序查找要包含的文件,如果找到匹配的文件,就会将其包含到当前的CMake脚本中。

include简写

在CMake中,include()命令的括号内可以不写.cmake扩展名。CMake会自动搜索指定的文件,并将其包含到当前的CMake脚本中。

因此,你可以这样写:

include(submodule)

这将引用名为submodule.cmake的文件,并将其包含到当前的CMake脚本中。CMake会搜索与给定名称匹配的文件,并自动添加.cmake扩展名。

请注意,如果存在多个与给定名称匹配的文件,CMake将按照特定的搜索顺序选择其中之一。如果你想确保引用的是特定的文件,建议在include()命令中包含完整的文件路径或使用相对路径来指定文件的位置。

组织工程技巧

  • 封装函数、编译参数等配置到.cmake文件中,总工程文件进行包含
  • include的时候,简化include(xxxx),然后设置CMAKE_MODULE_PATH环境变量

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/289112.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

四、HTML 属性

属性是 HTML 元素提供的附加信息。 一、HTML 属性 HTML 元素可以设置属性属性可以在元素中添加附加信息属性一般描述于开始标签属性总是以名称/值对的形式出现&#xff0c;比如&#xff1a;name"value"。 二、 属性实例 HTML 链接由 <a> 标签定义。链接的地…

HC-05蓝牙模块--------手机与STM32通信(代码编写)(上位机配置)保姆级教程

⏩ 大家好哇&#xff01;我是小光&#xff0c;嵌入式爱好者&#xff0c;一个想要成为系统架构师的大三学生。 ⏩因为之前无论是电赛还是做项目&#xff0c;都用到了蓝牙模块&#xff0c;如&#xff1a;手机和stm32的通信&#xff0c;电赛中的双车通信&#xff0c;还是遥感小车的…

教育机构培训系统小程序功能清单

制作一款适合自己的教育机构培训系统小程序&#xff0c;可以为学员提供更便捷的学习体验&#xff0c;同时提高机构的教学效率。今天将详细介绍如何使用乔拓云平台制作教育机构培训系统小程序。 在浏览器搜索乔拓云&#xff0c;登录到后台&#xff0c;选择教育系统并点击进入。在…

使用MQTT.JS创建一个网页版的MQTT客户端

一、MQTT.JS介绍 MQTT.js 是一个开源的 MQTT 协议的客户端库&#xff0c;使用 JavaScript 编写&#xff0c;主要用于 Node.js 和 浏览器环境中。是JavaScript 环境下的 MQTT 客户端库。可以用于微信小程序、支付宝小程序等定制浏览器环境。 我们可以直接在HTML文件中进行调用…

静态代理、JDK动态代理、CGLIB动态代理以及JDK和CGLIB动态代理的区别

代理 什么是代理&#xff1f;两个设计原则三要素 静态代理静态代理的实现定义接口-定义行为静态代理 -> 目标角色静态代理-> 代理角色静态代理测试 特点 JDK动态代理newProxyInstance获取代理对象通过代理对象实现目标对象的功能特点 Java动态代理类中的invoke是怎么调用…

P8 RV1126推流 —— 摄像头和咪头模块初始化

前言 从本章开始我们将要学习嵌入式音视频的学习了 &#xff0c;使用的瑞芯微的开发板 &#x1f3ac; 个人主页&#xff1a;ChenPi &#x1f43b;推荐专栏1: 《C_ChenPi的博客-CSDN博客》✨✨✨ &#x1f525; 推荐专栏2: 《Linux C应用编程&#xff08;概念类&#xff09;_C…

对偶问题的基本性质

写于&#xff1a;2024年1月3日晚 修改于&#xff1a; 原规划与对偶规划 原规划对偶规划 max ⁡ z C T X s.t. { A X ≤ b , 其中 X ( m ∗ 1 ) X ≥ 0 \begin{aligned} & \max \mathrm{z}\mathbf{C}^T \mathbf{X} \\ & \text { s.t. }\left\{\begin{array}{l}\mat…

RFID在物流、供应链管理、工业自动化等领域的广泛应用

随着物联网技术的不断发展&#xff0c;RFID&#xff08;无线射频识别&#xff09;技术作为一种自动识别和跟踪技术&#xff0c;在物流、供应链管理、工业自动化等领域得到了广泛应用。本文将介绍RFID解决方案及其应用场景。 一、RFID技术概述 RFID是一种通过无线电波通信&…

Apache的配置与应用

目录 1、Apache简介 2、Apache连接保持 3、Apache的访问控制 3.1、客户机地址限制 3.2、用户授权限制 &#xff08;1&#xff09;创建用户认证数据文件 &#xff08;2&#xff09;添加用户授权配置 &#xff08;3&#xff09;验证用户访问授权 4、Apache日志分割 4…

ALSA学习(5)——ASoC架构中的Machine

参考博客&#xff1a;https://blog.csdn.net/DroidPhone/article/details/7231605 &#xff08;以下内容皆为原博客转载&#xff09; 文章目录 一、注册Platform Device二、注册Platform Driver三、初始化入口soc_probe() 一、注册Platform Device ASoC把声卡注册为Platform …

FreeRTOS——计数型信号量知识总结及实战

1计数型信号量概念 1&#xff09;计数型信号量相当于队列长度大于1 的队列&#xff0c;因此计数型信号量能够容纳多个资源 2&#xff09;适用场景&#xff1a; 事件计数&#xff1a; 当每次事件发生后&#xff0c;在事件处理函数中释放计数型信号量&#xff08;计数值1&#x…

shell编程二

shell 脚本规范 shell脚本文件需要以.sh结尾 第一个原因&#xff0c;让别人认的这个是shell脚本&#xff0c;sh后缀编辑时有高亮显示。 拓展名后缀,如果省略.sh则不易判断该文件是否为shell脚本 ​ # 执行脚本方式 1、 sh 脚本.sh 2、 bash 脚本.sh 3、 ./脚本.sh # 需要执行权…

【C语言】数组

㊙️小明博客主页&#xff1a;➡️ 敲键盘的小明 ㊙️ ✅关注小明了解更多知识☝️ 文章目录 前言一、什么是数组&#xff1f;二、一维数组的创建和初始化2.1 一维数组的创建2.2 一维数组的初始化2.3 一维数组的使用3.3 一维数组的存储 三、二维数组的创建和初始化3.1 二维数组…

每日一练:LeeCode-503. 下一个更大元素 II (中)【单调栈】

本文是力扣LeeCode-503. 下一个更大元素 II 学习与理解过程&#xff0c;本文仅做学习之用&#xff0c;对本题感兴趣的小伙伴可以出门左拐LeeCode。 给定一个循环数组 nums &#xff08; nums[nums.length - 1] 的下一个元素是 nums[0] &#xff09;&#xff0c;返回 nums 中每个…

【大数据实战】亿级数据量: 检索一个元素是否在一个集合中 [bloom过滤器及其应用]

目录 亿级数据量: 检索一个元素是否在一个集合中 [bloom过滤器]问题描述bloom过滤器简介传统方法哈希表bloom的思路 bloom过滤器为什么快&#xff1f;bloom过滤器更加节省空间&#xff01;优缺点实际应用javagopython 亿级数据量: 检索一个元素是否在一个集合中 [bloom过滤器] …

uniapp中用户登录数据的存储方法探究

Hello大家好&#xff01;我是咕噜铁蛋&#xff01;作为一个博主&#xff0c;我们经常需要在应用程序中实现用户登录功能&#xff0c;并且需要将用户的登录数据进行存储&#xff0c;以便在多次使用应用程序时能够方便地获取用户信息。铁蛋通过科技手段帮大家收集整理了些知识&am…

python解决一维动态规划问题,寻找丑数

对于一维动态规划问题中&#xff0c;还有一个可能会经常遇到的问题&#xff0c;就是寻找丑数。 对于丑数的概念是&#xff0c;把只包含质因子2、3和5的数称作丑数&#xff08;Ugly Number&#xff09;。 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 添…

8、VS中Git使用

VS中Git使用 1.基础操作1.1 VS配置Git1.2 操作界面 2.本地库版本管理2.1 创建管理本地库2.2 暂存、存储2.3 提交2.4 版本切换 3.分支操作3.1 分支应用3.2 新建分支3.3 合并分支、解决冲突3.4 删除分支 4.远程库版本管理4.1 新建、克隆4.2 提取、拉取、推送与同步4.3 团队开发 最…

基于随机颜色反转合成和双分支学习的单模态内镜息肉分割

Single-Modality Endoscopic Polyp Segmentation via Random Color Reversal Synthesis and Two-Branched Learning 基于随机颜色反转合成和双分支学习的单模态内镜息肉分割背景难点贡献实验方法Color Reversal Strategy&#xff08;颜色反转策略&#xff09; 损失函数Thinking…

Python 箱线图的绘制(Matplotlib篇-13)

Python 箱线图的绘制(Matplotlib篇-13)         🍹博主 侯小啾 感谢您的支持与信赖。☀️ 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ�…