直播365足球-beat365投注网站-bst365官网

[makefile]攻克makefile之基础知识

虽然makefile手写比较麻烦,已经被CMakeLists取代,但是makefile编写对于以前老项目编译流程了解还是十分重要的,以前makefile也算是风靡一时,终究

[makefile]攻克makefile之基础知识

虽然makefile手写比较麻烦,已经被CMakeLists取代,但是makefile编写对于以前老项目编译流程了解还是十分重要的,以前makefile也算是风靡一时,终究被时代发展所遗弃。因为CMakeLists简洁和方便,直接干翻makefile,但是CMakeLists其实底层还是makefile,大家在cmake时候发现会生成makefile,可见CMakeLists是为了简化makefile开发流程而开发出来的。好了废话不多说。makefile整个是建立在目标-依赖-命令规则基础,比如下面一个场景

一盘菜:酱油 盐 油

开始炒菜

上面就是基于类似于规则

all: target1 target2 target3

target1: # 编译规则1

target2: # 编译规则2

target3: # 编译规则3

all被设置为第一个目标,并且target1、target2和target3被列为all的依赖。当你在命令行中运行make时,make命令会寻找并执行all目标规则,这将依次执行target1、target2和target3的编译规则。因此,通过在Makefile中设置all作为默认目标规则,你可以简化构建过程,只需运行make命令即可执行整个编译过程,无需显式指定目标

(1)常见$符合用法

^ 表示所有的依赖文件@ 表示生成的目标文件

(2)变量赋值

1、"="是最普通的等号,在Makefile中容易搞错赋值等号,使用 “=”进行赋值,变量的值是整个Makefile中最后被指定的值。

VIR_A = A

VIR_B = $(VIR_A) B

VIR_A = AA

经过上面的赋值后,最后VIR_B的值是AA B,而不是A B,在make时,会把整个Makefile展开,来决定变量的值

2、“:=” 表示直接赋值,赋予当前位置的值。

VIR_A := A

VIR_B := $(VIR_A) B

VIR_A := AA

最后BIR_B的值是A B,即根据当前位置进行赋值。因此相当于“=”,“:=”才是真正意义上的直接赋值

3、“?=” 表示如果该变量没有被赋值,赋值予等号后面的值。

VIR ?= new_value

如果VIR在之前没有被赋值,那么VIR的值就为new_value。

VIR := old_value

VIR ?= new_value

这种情况下,VIR的值就是old_value

4、"+="和平时写代码的理解是一样的,表示将符号后面的值添加到前面的变量上

(3)自带变量

代码语言:javascript复制CC = gcc #arm-linux-gcc

CPPFLAGS : C预处理的选项 -I

CFLAGS: C编译器的选项 -Wall -g -c

LDFLAGS : 链接器选项 -L -l(4)makefile常用函数

代码语言:javascript复制1. wildcard – 查找指定目录下的指定类型的文件

src=$(wildcard *.c) //找到当前目录下所有后缀为.c的文件,赋值给src

2. patsubst – 匹配替换

obj=$(patsubst %.c,%.o, $(src)) //把src变量里所有后缀为.c的文件替换成.o(5)makefile退出码

make 退出码Makefile的退出码有以下3种:

0 :: 表示成功执行

1 :: 表示make命令出现了错误

2 :: 使用了 “-q” 选项, 并且make使得一些目标不需要更新

(6)自动变量

(7)命令参数变量

更多命令参数变量:

[RM] rm -f

[AR] ar

[CC] cc

[CXX] g++

(8)通配符

通配符 *表示任意一个或多个字符

? 表示任意一个字符

[...] [abcd] 表示a,b,c,d中任意一个字符, [^abcd]表示除a,b,c,d以外的字符, [0-9]表示 0~9中任意一个数字

(9)伪目标

伪目标 .PHONY

代码语言:javascript复制.PHONY : clean

clean :

-rm edit $(objects)

← 上一篇: 美的柜机空调出现po,其实跟普通一样
下一篇: 联想的笔记本返厂维修要多久 →

相关推荐

标致301和爱丽舍哪个好,标致301和全新爱丽舍的区别

标致301和爱丽舍哪个好,标致301和全新爱丽舍的区别

为了更加地客观对比标致301和全新爱丽舍,指导价为8.47-11.97万的标致301选取了2018款 1.6L 自动舒适版,而指导价为8.38-12.58万的全新爱丽舍则选取

大姨妈是什么意思

大姨妈是什么意思

现在对于月经来说,很多人都不喜欢直接说出口。毕竟女孩子一般都比较害羞一点,如果在大厅广众之下喊自己月经了,那肯是是要被人笑话的

现金奶牛好下款吗 现金奶牛多久下款

现金奶牛好下款吗 现金奶牛多久下款

现金奶牛有下款的吗 1、不容易。现金奶牛借款需要提交相关信息,并进行专业的审核,因此不容易通过,现金奶牛是一款手机必备贷款平台,

Windows删不掉的历史记录index.dat

Windows删不掉的历史记录index.dat

Windows删不掉的历史记录index.dat 最新推荐文章于 2021-07-20 10:30:25 发布 smstong 最新推荐文章于 2021-07-20 10:30:25 发布 阅读量4.4k 收藏 1 点赞数 分类专

支付宝里的钱莫名变少, 因为你做了这件事, 看完马上改!

支付宝里的钱莫名变少, 因为你做了这件事, 看完马上改!

随着支付宝的出现,的确是大大改变了人们的生活,然而在带来方便的同时,也会随之而来的是风险。有不少朋友反映,自己支付宝里面的余额

贝莱德(BlackRock)

贝莱德(BlackRock)

基于AUM的管理费为主,低费率是优势从收入构成来看,贝莱德收入主要来自提供资产管理服务所获得的基础管理费(Base fees include investment advisory