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.hqwc.cn/news/318457.html

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

相关文章

多元统计分析(4):判别分析

4.1 判别分析的目标 主要目的:判别一个个体所属类别 4.2 距离判别 都选用用马氏距离 4.2.1 判别准则 化简的证明: 称为判别函数,为判别系数。 4.2.2 误判概率 【1】当两个正态总体的协方差相同 证明: 当两个正态总体重合的时…

ctfshow 元旦水友赛 月月的爱情故事(复现)

读了题目的文字,然后被刀了…… 但还是要向前看,做一个坚强又勇敢的人 好了碎碎念结束 一、原题 原题就是一段文字,一串字符和一个hint。 二、解题过程 1.base64解码 首先看到那行字符很像base64,那就先解码base64试一试嘛&a…

[C语言]比特鹏哥

主页有博主其他上万字精品笔记,都在不断完善更新! C语言 初识C语言 基本了解C语言的基础知识,对C语言有一个大概的认识。 每个知识点就是简单认识,不做详细讲解,后期课程都会细讲。 本章重点: 什么是C语言 第一个C语言程序 数据…

QT基础知识

QT基础知识 文章目录 QT基础知识1、QT是什么2、Qt的发展史3、为什么学习QT4、怎么学习QT1、工程的创建(环境的下载与安装请百度)2、创建的工程结构说明3、怎么看帮助文档1、类使用的相关介绍2. 查看所用部件(类)的相应成员函数(功…

用js让用户输入一个数累加和

需求&#xff1a;用户输入一个数&#xff0c; 计算 1 到这个数的和。 比如 用户输入的是 5&#xff0c; 则计算 1~5 之间的累加和 并且输出到控制台 <body><script>let numprompt(请输入一个数)let sum0for(let i1;i<num;i){sumi}console.log(sum)</script…

【Java进阶篇】Java中Timer实现定时调度的原理(解析)

Java中Timer实现定时调度的原理 ✔️ 引言✔️JDK 中Timer类的定义✔️拓展知识仓✔️优缺点 ✔️ 引言 Java中的Timer类是用于计划执行一项任务一次或重复固定延迟执行的简单工具。它使用一个名为TaskQueue的内部类来存储要执行的任务&#xff0c;这些任务被封装为TimerTask对…

阿里云性能测评ESSD Entry云盘、SSD云盘、ESSD和高效云盘

阿里云服务器系统盘或数据盘支持多种云盘类型&#xff0c;如高效云盘、ESSD Entry云盘、SSD云盘、ESSD云盘、ESSD PL-X云盘及ESSD AutoPL云盘等&#xff0c;阿里云百科aliyunbaike.com详细介绍不同云盘说明及单盘容量、最大/最小IOPS、最大/最小吞吐量、单路随机写平均时延等性…

语音AI小夜灯项目

一、项目简介 使用ESP32-S3N8R8模块作为主控芯片&#xff0c;S3内核增加了用于加速神经网络计算和信号处理等的指令&#xff0c;这使得我们可以使用它来快速解析训练好的语音模型进行语音识别的功能。 二、原理解析 本项目由四个部分组成&#xff0c;电源部分、LED照明部分、…

作业--day41

利用模板类完成顺序表 #include <iostream>using namespace std;//模板类 template <typename T> class SeqTab{T arr[20];int maxsize; public:SeqTab():maxsize(0){}void Insert(T a);void Search(T a);void Delete(int index);void Show(); };//尾插 template …

《合成孔径雷达成像算法与实现》Figure5.13

clc clear close all距离向参数 R_eta_c_1 450; % 景中心斜距 R_eta_c_2 850; % 景中心斜距 R_eta_c_3 1250; % 景中心斜距方位向参数 c 3e8; f0 5.3e6; Vr 7100; Ta 0.64; % 目标照射时间 Ka 2095; % 方位向调频率 theta_r_c 0; % 斜视角参数计算…

C语言实例_math.h库函数功能及其用法详解

一、前言 数学在计算机编程中扮演着至关重要的角色&#xff0c;C语言的math.h头文件提供了一系列的函数和工具&#xff0c;用于数学计算和常用数学函数的实现。这些函数包括数值运算、三角函数、指数对数函数等&#xff0c;为开发人员提供了强大的数学处理能力。本文将对math.…

C++-类和对象(2)

1.类的6个默认成员函数 如果一个类中什么成员都没有&#xff0c;简称为空类。 空类中真的什么都没有吗&#xff1f;并不是&#xff0c;任何类在什么都不写时&#xff0c;编译器会自动生成以下 6 个默认成员 函数。 默认成员函数&#xff1a;用户没有显式实现&#xff0c;编译…