CMakeLists.txt 简单的语法介绍

news/2024/9/23 11:54:18/

一. 简介

前面通过几个简单地示例向大家演示了 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.ppmy.cn/news/1452392.html

相关文章

HTML_CSS学习:常用文本属性

一、文本颜色 相关代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>文本颜色</title><style>div{font-size: 90px;}.atguigu1{color: #238c20;}.atguigu2{color: rgb(2…

CUDA CPP Unity Compute Shader

为学 开始一个新的学习计划&#xff0c;涵盖&#xff1a; 主题学习内容CUDAProfessional CUDA C Programming/NVIDIA CUDA初级教程视频(周斌)CCPrimer / The Cherno CPPUnity Compute ShaderUdemy Learn to Write Unity Compute ShadersLinear AlgebraMIT 18.06 Prof.Gilbert…

【C语言】用数组和函数实现扫雷游戏

用数组和函数实现扫雷游戏 游戏界面&#xff1a; 代码如下&#xff1a; game.h #pragma once #include <stdio.h> #include <stdlib.h> #include <time.h> #define EASY_COUNT 10 #define ROW 9 #define COL 9 #define ROWS ROW2 #define COLS COL2 //初始…

经典网络解读——Efficientnet

论文&#xff1a;EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks&#xff08;2019.5&#xff09; 作者&#xff1a;Mingxing Tan, Quoc V. Le 链接&#xff1a;https://arxiv.org/abs/1905.11946 代码&#xff1a;https://github.com/tensorflow/t…

【C++】滑动窗口:最大连续1的个数

1.题目 2.算法思路 其实在做这道题的时候并不需要真的把0翻转成1&#xff0c;只需要找到最长的子数组且该子数组中0的个数不大于K&#xff0c;就可以了&#xff01; 当然我们首先想到的是暴力穷举法&#xff1a; 找到所有符合题意的子数组&#xff0c;跳出最长的那个就可以了…

WAAP动态安全解决方案

随着企业数字化进程不断加速&#xff0c;应用安全面临多重威胁&#xff0c;新型攻击方式层出不穷&#xff0c;常见的攻击形式包括Web应用攻击、DDoS攻击、API攻击、恶意爬虫攻击等。企业正面临严峻的安全防护挑战&#xff0c;需寻找一个可靠、全面的安全解决方案。在此情况下&a…

407. 接雨水 II

Problem: 407. 接雨水 II 文章目录 思路解题方法复杂度Code 思路 这个问题可以使用优先队列和广度优先搜索&#xff08;BFS&#xff09;来解决。首先&#xff0c;我们将所有边界上的单元格添加到优先队列中&#xff0c;并将其标记为已访问。然后&#xff0c;我们从队列中取出最…

FPGA搭积木之边沿检测电路

目录 1前言2.原理3.代码4仿真 1前言 今天分享一个FPGA设计中很常用的边沿检测电路&#xff0c;并参数化封装成自己的IP核。该电路的作用是输入一个信号&#xff0c;在其上升沿或者下降沿时&#xff08;可选&#xff09;输出一个时钟周期脉冲。时序图如下&#xff1a; 2.原理 利…