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环境变量

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#编程-使用构造函数和析构函数

使用构造函数和析构函数 如果想要在以创建对象时就初始化成员变量,可以创建名为构造函数的特殊函数。您可能还需要使用对象后从内存中删除这些对象。这可通过称为析构函数的函数实现。 实现构造函数 构造函数是在创建对象时自动调用的特殊方法。无须显式地调用构造函数。请…

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

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

CMake是什么?为什么学习CMake

😈「CSDN主页」:传送门 😈「Bilibil首页」:传送门 😈「本文的内容」:CMake入门教程 😈「动动你的小手」:点赞👍收藏⭐️评论📝 文章目录 1.CMake简介2.为什么…

RK3566 ANDROID 11 平台上适配移远EC200A

适配前理清楚一下调试的流程: 1.该模块为LGA封装,需要控制上电时序模块才能正常上电工作: 2.模块供电正常后,读取模组的PID 和VID 并将其ID添加到内核里面,确保USB转Serial端口能够正常生成: 3.生成ttyUSB0~ttyUSB2…

【报错解决】TypeError: __init__() got an unexpected keyword argument ‘size‘

报错描述 我在使用Doc2vec训练模型时,遇到了这一报错,相应的代码及报错信息如下所示: #代码model Doc2Vec(x_train, min_count5, window5, sizesize, sample1e-4, negative5,workersmultiprocessing.cpu_count())#报错信息TypeError: __in…

Redis(二)

1、redis的持久化 "Redis 如何将数据写入磁盘",首先要明白的时候,我们使用的redis的数据保存在内存上的,也就是说,只要我们的电脑关机或者重启服务器,那么在内存中的数据就会消失,所以要想持久化…

06.02 customizing plots with style sheets

使用 style 来配置 pyplot 风格 import matplotlib.pyplot as plt import numpy as np%matplotlib inlinestyle 是 pyplot 的一个子模块,方便进行风格转换, pyplot 有很多的预设风格,可以使用 plt.style.available 来查看: plt.…

浅谈命令模式

命令模式是一种行为设计模式,用于将一个请求封装成一个对象,从而使得请求的发送者和接收者解耦,并支持对请求进行参数化、队列化、撤销和重做等操作。 在命令模式中,有一下介个关键角色: Command(命令&am…

ubuntu 卸载桌面

要卸载Ubuntu上的桌面环境,您可以按照以下步骤进行操作: 登录到您的Ubuntu系统,并打开终端。 确认您当前正在使用的桌面环境。可以运行以下命令来查看已安装的桌面环境: s /usr/share/xsessions/ 根据您当前使用的桌面环境&…

爆肝整理,接口性能测试总结,一篇直接上高速...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、 性能测试术语…

初级前端算法

题目1 题目描述&#xff1a; 找出数组中的最大值 输入&#xff1a; [3, 9, 2, 5, 1] 输出&#xff1a; 9 JavaScript解答&#xff1a; function findMaxValue(arr) {let max arr[0];for (let i 1; i < arr.length; i) {if (arr[i] > max) {max arr[i];}}return m…

新概念英语第二册(18)

【New words and expressions】生词和短语&#xff08;3&#xff09; pub n. 小酒店 landlord n. 店主 bill n. 帐单 【Text】 After I had had lunch at a village pub, I looked for my…

【量化】商品期货换月的处理思路(old)

商品期货存在换月的情况&#xff0c;即期货合约是有到期日的&#xff0c;如果不想实物交割就得将持仓转换到之后的合约上&#xff0c;而不同月份的价格是不一样的&#xff0c;也就是不连续的&#xff0c;在回测中需要处理换月带来的跳空&#xff1a; 比如上图中的PG是逐月换月…

const的基础用法

#include<iostream> using namespace std;void main() {const int a 0;int const b 1;//一样const int * c;//const修饰的是指针所指向的内存空间(即值)&#xff0c;不能被修改int* const d NULL;//const修饰的指针变量不能被修改const int* const eNULL;//const修饰的…

uni-app 从入门到精通 3天快速掌握 文字版 学习专栏

大家好&#xff0c;我是java1234小锋老师。 近日锋哥又卷了一波课程&#xff0c;uni-app 从入门到精通 3天快速掌握教程&#xff0c;文字版视频版。三天掌握。 2023版uniapp从入门到上天视频教程(Java后端无废话版)&#xff0c;火爆更新中..._哔哩哔哩_bilibili2023版uniapp从…

亚信安慧AntDB数据库——通信运营商核心系统的全面演进

AntDB数据库源自通信运营商核心系统&#xff0c;经过15年的平稳运行和不断演进&#xff0c;成功跟随通信技术的升级步伐&#xff0c;逐步迈向5G时代&#xff0c;并且在这期间完成了8次大版本的迭代&#xff0c;为行业树立了技术领先的典范。其独特之处在于具备超融合架构&#…

如何在win7同样支持Webview2 在 WPF 中使用本地 Webview2 ,如何不依赖系统 Runtime

项目运行环境&#xff1a; .Net Framework 4.5.2 Windows 7 x64 Service Pack 1 WebView2 Microsoft.WebView2.FixedVersionRuntime.120.0.2210.91.x64 考虑到很多老项目&#xff0c;本项目使用的是.Net Framework 4.5.2&#xff0c;.Net 更高版本的其实也是可以支持的。 …

vmware安装龙蜥操作系统

vmware安装龙蜥操作系统 1、下载龙蜥操作系统 8.8 镜像文件2、安装龙蜥操作系统 8.83、配置龙蜥操作系统 8.83.1、配置静态IP地址 和 dns3.2、查看磁盘分区3.3、查看系统版本 1、下载龙蜥操作系统 8.8 镜像文件 这里选择 2023年2月发布的 8.8 版本 官方下载链接 https://mirro…

起名+算命+塔罗+星座+八字测算大全小程序源码系统 带完整的安装包以及搭建教程

随着科技的发展和人们生活水平的提高&#xff0c;越来越多的人开始关注个人命运和运势&#xff0c;希望通过各种方式了解自己的未来。在这样的背景下&#xff0c;一款集合了起名、算命塔、罗星座、八字测算等多种功能的小程序应运而生。这款小程序源码系统旨在为用户提供全方位…

mybatis-flex笔记

MyBatis-Flex 的增删改功能 - MyBatis-Flex 官方网站https://mybatis-flex.com/zh/base/add-delete-update.html 代码https://gitee.com/hntianshu/mybatis-flex-test 一 新增数据 不忽略 null 值。 就是允许有null 忽略null 就是不允许有null BaseMapper 的接口提供了 inser…