笔记整理—Makefile

        在Linux中,最常用于管理工程的工具其中之一就是Makefile,Makefile与make指令相结合,可将项目的不同文件按照要求进行条件编译,最终编译出想要得到的程序或库。本文主要说明Makefile的常用语句以及编写方式。

        首先是通配符“%”,这个符号在编译过程中十分常用,表示自推导。例如:

%.o 表示所有以.o结尾的文件

        Makefile的变量定义如下:

var :=xxx

        追加方式如下:

var +=xxxx

        引用方式如下:

$(var)

        Makefile中常用的就是伪目标,伪目标听着很陌生,但实则用了很多,如make clean指令,常常使用伪目标实现。此目标不代表文件,也不是为了得到文件,而是为了执行某个东西:

clean:
    rm *.o *.elf *.bin *.dis mkx210 -f    <=该语句在clean:后面没有依赖,其目的只是为了执行rm这条指令以及后面的要求。

.PHONY clean    <=声明伪目标
 clean:
    xxxx

        Makefile也可以去引用别的Makefile,使用include去导入其他的Makefile,同C语言include一样,在原地进行文件的展开。

        Makefile中的赋值有两种,其1为=,其二为:=。其中,“=”赋值是一种取决于最后一次赋值的解析:

var=3
echo $(var)  =>输出5
var=5

        “:=”是一种就地的赋值解析:

var:=3
echo $(var)  =>输出3
var=5

        组合一下:

A=abc
B=$(A)def
A=ff

all:
    echo $(b)    =>ffdef


A=abc
B:=$(A)def
A=ff

all:
    echo $(B)    =>abcdef

        可见对于“=”而言,解析谁就去看谁的前后。

        “?=” 符号表示前面有无定义过这个变量,若有则不执行:

var ?=3
echo $(var)    =>3

var =
var ?=3
echo $(var)    =>空

        “+=”符号表示为拼接:

var =abc
var +=def
echo $(var)    =>abc def

        导出环境变量使用export,可由外部的Makefile使用。

        通配符,有如*和?的字符,*表示若干个任意字符,?表示一个任意的字符:

all:1.c 2.c 3.c 12.c 1.h test.c
    echo ?.c    =>1.c 2.c 3.c
    ceho *.c    =>12.c test.c

        "[]"表示,将“[]”中字符依次与外结合匹配:

echo [12].c    =>1.c 2.c

        "%"也是通配符,但一般用于规则通配符:

%.o:%.S

        自动变量的作用,文件太多,不好进行描述,用于替代一些满足要求的条件集合。

$@ 规则的目标文件名
$< 规则的依赖文件名
$^ 依赖的文件集合

all:1.c 2.c 12.c test.c 1.h
echo $@    =>all
echo $<    =>1.c
echo $^    =>1.c 2.c 12.c test.c 1.h

若写为%.o:%c
    echo $<    则会输出所有符合规则的名字

         Makefile管道“|”,将已得到的变量向下传递。

        一般OBJ中存放.o文件,SRC放源代码,TOPDIR为顶层目录,xxxtree代表某个文件的根目录,MKCONFIG是一个Makefile中的变量,指向一个mkconfig文件,是一个脚本,是一个在配置阶段的脚本。

  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值