CMakeLists.txt 简单的语法介绍

一. 简介

前面通过几个简单地示例向大家演示了 cmake 的使用方法,由此可知,cmake 的使用方法其实还是非常简单的,重点在于编写 CMakeLists.txt,CMakeLists.txt 的语法规则也简单,并没有 Makefile 的语法规则那么复杂难以理解!
本小节我们来学习 CMakeLists.txt 的语法规则。

二.  CMakeLists.txt 简单的语法介绍

1.  注释

CMakeLists.txt 文件中,使用“#”号进行单行注释,譬如:

#
# 这是注释信息
#
cmake_minimum_required(VERSION 3.5)
project(HELLO)

大多数脚本语言都是使用“#”号进行注释。

2. 命令(command)

通常在 CMakeLists.txt 文件中,使用最多的是命令,譬如上例中的 cmake_minimum_required project 都是命令;命令的使用方式有点类似于 C 语言中的函数,因为命令后面需要提供一对括号,并且通常需要我 们提供参数,多个参数使用 空格 分隔而不是逗号 “ , ”,这是与函数不同的地方。
命令的语法格式如下所示:
command(参数 1 参数 2 参数 3 ...)
不同的命令所需的参数不同,需要注意的是,参数可以分为必要参数和可选参数(通常称为选项)。
很多命令都提供了这两类参数,必要参数使用<参数>表示,而可选参数使用[参数 ]表示
譬如 set 命令:
set(<variable> <value>... [PARENT_SCOPE])
set 命令用于设置变量,第一个参数 <variable> 和第二个参数 <value> 是必要参数,在参数列表( 表示参数个数没有限制)的最后可以添加一个可选参数 PARENT_SCOPE PARENT_SCOPE 选项),既然是可选 的,那就不是必须的,根据实际使用情况确定是否需要添加。
CMakeLists.txt 中,命令名不区分大小写,可以使用大写字母或小写字母书写命令名,譬如:
project(HELLO) #小写
PROJECT(HELLO) #大写
这俩的效果是相同的,指定的是同一个命令,并没区别;这个主要看个人喜好,个人喜欢用小写字母,主要是为了和变量区分开来,因为 cmake 的内置变量其名称都是使用大写字母组成的。

3.  变量(variable

CMakeLists.txt 文件中可以使用变量,使用 set 命令可以对变量进行设置,譬如:

# 设置变量 MY_VAL
set(MY_VAL "Hello World!")
上例中,通过 set 命令对变量 MY_VAL 进行设置,将其内容设置为 "Hello World!"
那如何引用这个变 量呢?
这与 Makefile 是相同的,通过 ${MY_VAL} 方式来引用变量,如下所示:
#设置变量 MY_VAL
set(MY_VAL "Hello World!")#引用变量 MY_VAL
message(${MY_VAL})
变量可以分为 cmake 内置变量以及自定义变量。
譬如,上例中所定义的 MY_VAL 就是一个自定义变量;
譬如,在 前面 cmake编译举例中所使用的 LIBRARY_OUTPUT_PATH EXECUTABLE_OUTPUT_PATH 变量则是 cmake 的内置变量,每一个内置变量都有自己的含义,像这样的内置变量还有很多,稍后向大家介绍。

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

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

相关文章

3.2Java全栈开发前端+后端(全栈工程师进阶之路)-前端框架VUE3框架-企业级应用- Vuex

Vuex简介 Vuex概述 Vuex是一个专门为Vue.js应用程序开发的状态管理模式, 它采用集中式存储管理所有组件的公共状态, 并以相应的规 则保证状态以一种可预测的方式发生变化. 试想这样的场景, 比如一个Vue的根实例下面有一个根组件名为App.vue, 它下面有两个子组件A.vue和B.vu…

022、Python+fastapi,第一个Python项目走向第22步:ubuntu 24.04 docker 安装mysql8集群、redis集群(三)

这次来安装mysql8了&#xff0c;以前安装不是docker安装&#xff0c;这个我也是第一次&#xff0c;人人都有第一次嚒 前言 前面的redis安装还是花了点时间的&#xff0c;主要是网上教程&#xff0c;各有各的好&#xff0c;大家千万别取其长处&#xff0c;个人觉得这个环境影响…

ASP.NET网上车辆档案管理系统

摘 要 本文采用基于Web的Asp.net技术&#xff0c;并与sql server 2000数据库相结合&#xff0c;研发了一套车辆档案管理系统。该系统扩展性好&#xff0c;易于维护。简化了车辆档案设计流程&#xff0c;去除了冗余信息。汽车销售企业可以通过本系统完成整个销售及售后所有档案…

grpc拦截器+metadata进行接口统一校验

grpc拦截器metadata进行接口统一校验 hello.protoproto生成go文件命令client.go方法一&#xff1a;自定义拦截器&#xff0c;实现统一参数校验方法二&#xff1a;使用grpc内置拦截器&#xff0c;需要自定义结构体&#xff0c;实现credentials.PerRPCCredentials接口中的方法 se…

rust 实现GUI页面方法

rust 实现GUI页面方法 position-based 特点 精确控制&#xff1a;开发者可以精确控制每个元素的位置和大小&#xff0c;这在某些需要精细布局调整的应用场景中非常有用。直观&#xff1a;对于简单的界面&#xff0c;使用基于位置的布局方式很直观&#xff0c;容易理解。灵活…

python爬虫实战

import requests import json yesinput(输入页数&#xff1a;) yesint(yes)headers {"accept": "application/json, text/plain, */*","accept-language": "zh-CN,zh;q0.9","content-type": "application/json",…

一对一WebRTC视频通话系列(三)——leave和peer-leave信令实现

本篇博客主要分为两部分&#xff0c;第一部分为leave信令的实现&#xff0c;即当有客户端离开房间后&#xff0c;服务端和其他在房间内的客户需知晓。第二部分为媒体协商和网络协商相关API。 本系列博客主要记录一对一WebRTC视频通话实现过程中的一些重点&#xff0c;代码全部进…

渗透之sql盲注(时间/boolean盲注)

sql盲注&#xff1a;sql盲注意思是我们并不能在web页面中看到具体的信息&#xff0c;我们只能通过输入的语句的真假来判断。从而拿到我们想要的信息。 我们通常使用ascii值来进行盲注。 目录 手动注入&#xff1a; 时间盲注&#xff1a; 布尔盲注&#xff1a; python脚本注…

【Java】基本程序设计结构(一)

前言&#xff1a;现在&#xff0c;假定已经成功安装了JDK&#xff0c;并且能够运行上篇示例程序。本篇将开始介绍Java程序中的基本设计结构&#xff0c;其中包括&#xff1a;一个简单的Java应用&#xff0c;注释&#xff0c;数据类型&#xff0c;变量与常量&#xff0c;运算符&…

【深度学习基础(3)】初识神经网络之深度学习hello world

文章目录 一. 训练Keras中的MNIST数据集二. 工作流程1. 构建神经网络2. 准备图像数据3. 训练模型4. 利用模型进行预测5. (新数据上)评估模型精度 本节将首先给出一个神经网络示例&#xff0c;引出如下概念。了解完本节后&#xff0c;可以对神经网络在代码上的实现有一个整体的了…

【架构系列】RabbitMQ应用场景及在实际项目中如何搭建可靠的RabbitMQ架构体系

作者:后端小肥肠 创作不易&#xff0c;未经允许禁止转载。 1. 前言 RabbitMQ&#xff0c;作为一款高性能、可靠的消息队列软件&#xff0c;已经成为许多企业和开发团队的首选之一。它的灵活性和可扩展性使得它适用于各种应用场景&#xff0c;从简单的任务队列到复杂的分布式系统…

算法设计与分析——期末1h

目录 第一章 算法的定义 算法的三要素 算法的基本性质 算法的时间复杂度数量级&#xff1a; 第二章 兔子繁殖问题&#xff08;递推法&#xff09; 猴子吃桃问题&#xff08;递推法&#xff09; 穿越沙漠问题&#xff08;递推法&#xff08;倒推&#xff09;&#xff09; 百钱百…

解决Maven本地仓库存在依赖包还需要远程下载的问题

背景 公司有自己maven私服&#xff0c;正在在私服可以使用的情况&#xff0c;打包是没问题的。但是这次是由于公司大楼整体因电路检修而停电&#xff0c;所有服务器关机&#xff0c;包括maven私服服务器。然后当天确有一个包需要打&#xff0c;这个时候发现死活打不了&#xf…

力扣数据库题库学习(5.4日)--1661. 每台机器的进程平均运行时间

1661. 每台机器的进程平均运行时间 问题链接 解题思路 现在有一个工厂网站由几台机器运行&#xff0c;每台机器上运行着 相同数量的进程 。编写解决方案&#xff0c;计算每台机器各自完成一个进程任务的平均耗时。 完成一个进程任务的时间指进程的’end’ 时间戳 减去 ‘sta…

线性数据结构-手写链表-LinkList

为什么需要手写实现数据结构&#xff1f; 其实技术的本身就是基础的积累和搭建的过程&#xff0c;基础扎实 地基平稳 万丈高楼才会久战不衰&#xff0c;做技术能一通百&#xff0c;百通千就不怕有再难得技术了。 一&#xff1a;链表的分类 主要有单向&#xff0c;双向和循环链表…

飞书API(7):MySQL 入库通用版本

一、引入 在上一篇介绍了如何使用 pandas 处理飞书接口返回的数据&#xff0c;并将处理好的数据入库。最终的代码拓展性太差&#xff0c;本篇来探讨下如何使得上一篇的最终代码拓展性更好&#xff01;为什么上一篇的代码拓展性太差呢&#xff1f;我总结了几点&#xff1a; 列…

福布斯AI 50榜单发布!新兴势力颠覆传统,叫板谷歌、微软

整理 | 王轶群 责编 | 唐小引 出品丨AI 科技大本营&#xff08;ID&#xff1a;rgznai100&#xff09; ChatGPT带来的生成式人工智能热浪&#xff0c;促使众多企业争先恐后地试图实现生成式人工智能的最新进展。一个新的帮助企业开发和部署人工智能驱动的应用程序的科技经济体系…

Spring Boot面试知识点总结(经典15问)

Spring Boot面试知识点总结&#xff08;问答合集&#xff09; 文章目录 Spring Boot面试知识点总结&#xff08;问答合集&#xff09;一、Spring Boot简介二、核心特性三、面试问题及答案问题1&#xff1a;Spring Boot的核心配置文件是什么&#xff1f;问题2&#xff1a;Spring…

NFS共享存储服务

一、NFS概述 1、简介 NFS是一种基于TCP/IP传输的网络文件系统协议。 NFS 服务的实现依赖于 RPC&#xff08;Remote Process Call&#xff0c;远端过程调用&#xff09;机制&#xff0c;通过使用 NFS 协议&#xff0c;客户机可以像访问本地目录一样访问远程服务器中的共享资源…

BUUCTF——web题目练习

[极客大挑战 2019]LoveSQL 输入1 123 输入1 123 输入2 123 这里可以看出注入位置为password的后面&#xff0c;开始手动注入 闭合方式为1 [极客大挑战 2019]Secret File 查看页面源代码&#xff0c;发现里面有一个跳转页面的连接&#xff0c;点击进去&#xff0c;查看这个…