Linux基础(六)

Makefile的引入


当我们要对多个文件进行编译成一个可执行文件时,需要使用Makefile。它就像一个批次处理的编译脚本,可实现自动化编译,一旦写好,只需要一个make命令,整个过程就会自动编译。


1. Makefile的规则
Makefile是由规则来实现的,即Makefile文件内容的主体由很多规则构成,每一条规则都由三部分组成:
(1)目标:目标定格写,后面是冒号(冒号后面是依赖)
(2)依赖:依赖是用来产生目标的原材料。
(3)命令:命令前面一定是Tab,不能是顶格,也不能说多个空格。命令就是要生成那个目标需要做的动作。
格式:
目标: 依赖
Tab键 命令

2. make执行流程
(1)查找当前目录下的Makefile文件;
(2)初始化Makefile文件中的变量;
(3)分析Makefile中的所有规则;
(4)为所有的目标文件创建依赖关系;
(5)根据依赖关系,决定哪些文件要重新生成;
(6)执行生成命令;

3.Makefile的相关概念
(1)通配符%和Makefile自动推导(规则)
a. %是Makefile中的通配符,代表一个或几个字母。也就是说%.o就代表所有以.o为结尾的文件。
b. * 若干个任意字符
c. ? 1个任意字符
d. [] 将[]中的字符依次去和外面的结合匹配
e. 所谓自动推导其实就是Makefile的规则。当Makefile需要某一个目标时,他会把这个目标去套规则说明,一旦套上了某个规则说明,则Makefile会试图寻找这个规则中的依赖,如果能找到则会执行这个规则用依赖生成目标。

(2)Makefile中定义和使用变量
a. 变量没有类型,直接进行赋值;
b. 引用时直接用$var:
$是解引用符号,var代表变量。

(3)伪目标(.PHONY)
a. 伪目标意思是这个目标本身不代表一个文件,执行这个目标不是为了得到某个文件或东西,而是单纯为了执行这个目标下面的命令。
b. 伪目标一般都没有依赖,因为执行伪目标就是为了执行目标下面的命令。既然一定要执行命令了那就不必加依赖,因为不加依赖意思就是无条件执行。
c. 伪目标可以直接写,不影响使用;但是有时候为了明确声明这个目标是伪目标会在伪目标的前面用.PHONY来明确声明它是伪目标。

(4)Makfile中引用其他Makefile
有时候Makefile总体比较复杂,因此分成好几个Makefile来写。然后在主Makefile中引用其他的,用include指令来引用。引用的效果也是原地展开,和C语言中的头文件包含非常相似。

(5)Makefile中注释使用#

(6)命令前面的@用来静默执行
在makefile的命令行中前面的@表示静默执行。
Makefile中默认情况下在执行一行命令前会先把这行命令给打印出来,然后再执行这行命令。如果你不想看到命令本身,只想看到命令执行就静默执行即可。

(7)Makefile中几种变量赋值运算符
a. ?=
如果变量前面并没有赋值过则执行这条赋值,如果前面已经赋值过了则本行被忽略。
b. +=
用来给一个已经赋值的变量接续赋值,意思就是把这次的值加到原来的值的后面,有点类似于C语言中的strcat。(在shell、makefile等文件中,可以认为所有变量都是字符串,+=就相当于给字符串stcat接续内容)(注意一个细节,+=续接的内容和原来的内容之间会自动加一个空格隔开)
c. = 最简单的赋值
d. := 一般也是赋值
区别:用“=”赋值的变量,在被解析时他的值取决于最后一次赋值时的值,所以你看变量引用的值时不能只往前面看,还要往后面看。用“:=”来赋值的,则是就地直接解析,只用往前看即可。
举例说明:

A=abc
B=S(A)def
A=gh
all:
    echo $(B)

打印出的结果为ghdef;

A=abc
B:=$(A)def
A=gh
all:
    echo $(B)

打印出的结果为abcdef

(8)Makefile的环境变量
a. makefile中用export导出的就是环境变量,一般情况下要求环境变量名用大写,普通变量名用小写;
b. 环境变量和普通变量不同,可以这样理解:环境变量类似于整个工程中所有Makefile之间可以共享的全局变量,而普通变量只是当前本Makefile中使用的局部变量。所以要注意:定义了一个环境变量会影响到工程中别的Makefile文件,因此要小心;
c. Makefile中可能有一些环境变量可能是makefile本身自己定义的内部的环境变量或者是当前的执行环境提供的环境变量(譬如我们在make执行时给makefile传参。make CC=arm-linux-gcc,其实就是给当前Makefile传了一个环境变量CC,值是arm-linux-gcc。我们在make时给makefile传的环境变量值优先级最高的,可以覆盖makefile中的赋值)。

(9)Makefile的自动变量——预定义的特殊意义的符号
常见的有:
$@: 指代当前规则下的目标文件列表
$<: 指代依赖文件列表中的第一个依赖文件
$^: 指代依赖文件列表中的所有的依赖文件
$?: 指代依赖文件列表中所有对应目标文件的文件列表

标题基于SpringBoot+Vue的社区便民服务平台研究AI更换标题第1章引言介绍社区便民服务平台的研究背景、意义,以及基于SpringBoot+Vue技术的研究现状和创新点。1.1研究背景与意义分析社区便民服务的重要性,以及SpringBoot+Vue技术在平台建设中的优势。1.2国内外研究现状概述国内外在社区便民服务平台方面的发展现状。1.3研究方法与创新点阐述本文采用的研究方法和在SpringBoot+Vue技术应用上的创新之处。第2章相关理论介绍SpringBoot和Vue的相关理论基础,以及它们在社区便民服务平台中的应用。2.1SpringBoot技术概述解释SpringBoot的基本概念、特点及其在便民服务平台中的应用价值。2.2Vue技术概述阐述Vue的核心思想、技术特性及其在前端界面开发中的优势。2.3SpringBoot与Vue的整合应用探讨SpringBoot与Vue如何有效整合,以提升社区便民服务平台的性能。第3章平台需求分析与设计分析社区便民服务平台的需求,并基于SpringBoot+Vue技术进行平台设计。3.1需求分析明确平台需满足的功能需求和性能需求。3.2架构设计设计平台的整体架构,包括前后端分离、模块化设计等思想。3.3数据库设计根据平台需求设计合理的数据库结构,包括数据表、字段等。第4章平台实现与关键技术详细阐述基于SpringBoot+Vue的社区便民服务平台的实现过程及关键技术。4.1后端服务实现使用SpringBoot实现后端服务,包括用户管理、服务管理等核心功能。4.2前端界面实现采用Vue技术实现前端界面,提供友好的用户交互体验。4.3前后端交互技术探讨前后端数据交互的方式,如RESTful API、WebSocket等。第5章平台测试与优化对实现的社区便民服务平台进行全面测试,并针对问题进行优化。5.1测试环境与工具介绍测试
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值