Ja.Code 猿修地,时光机
致力于成为一位活用前端技术的嵌入式全栈工程师

Makefile笔记

2017-12-26
Jacob Pan

Makefile主要用来make的输入,命令make filename的意思就是要把filename生成。

基本

target: dependences
	shell cmd

以上是Makefile的基本格式。

targets: %:

通过%可以对target进行模式拓展

targets = aa bb

targets: %: %.c
	gcc -o $@ $^

这里会自动拓展成

aa: aa.c
	gcc -o aa aa.c

bb: bb.c
	gcc -o bb bb.c

自动变量

如上面的例子,$@代表target,$^代表全部的依赖文件,还有以下自动变量:

  • $< 依赖文件中的第一个文件

参数

通过make可以传递参数,在Makefile里可以获取到

aa: aa.c
	gcc $(CFLAG) -o $@ $^

通过make CFLAG=-g,就可以把参数传入到makefile中,变成gcc -g -o aa aa.c

ifeq, ifdef

ifdef VAR
target = aa
else
target = bb
endif

ifeq ($(VAR), 1)
CFLAG = -g
endif

target:
	gcc $(CFLAG) -o $@ $^

上述例子描述了ifdefifeq的用法,请注意ifdef后面跟的变量名加$(),此外,还有ifndefifneq

这里的makefile可以通过make VAR=1传入参数,使makefile针对不同情况执行不同的命令。

常用函数

subst

$(subst <from>,<to>,<text>)

addsuffix, addprefix

$(addsuffix <suffix>,<names...>)
$(addprefix <suffix>,<names...>)

更多makefile函数可见makefile中常用函数

引用其他makefile

如果当前目录下有一个makefile.in,可以通过下面语句来引入

include makefile.in

警告和错误信息

$(warning ...)      // 打印warning信息
$(error ...)        // 打印error信息,并立马退出make

Jacob Pan ( jacobpan3g.github.io/cn )


Comments

Content