MAKEFILE文件使用说明:linux
shell下执行make,查找文件的顺序以下GNUmakefile => makefile => Makefile,一般状况都是用Makefile来命名shell
make -f xxx ,-f是指定文件名macos
make 默认执行Makefile的第一个目标函数
make 后面的参数能够给文件里面的变量赋值,如make TARGET=allui
简单事例:lua
事例一,内含多个目标构建:spa
事例二,pbc在mac与linux下的构建:命令行
以下就是一个简单的目标实例:TARGET是目标,pbc-lua53.c是依赖,命令行Tab键开头orm
$(TARGET) : pbc-lua53.cblog
$(CC) $(CFLAGS) -shared -o $@ -I../.. -I$(LUADIR) $^ -L../../build -lpbc
Makefile文件能够包含多个规则,当第一个规则的命令在执行的时候发现没有相应的依赖,就从后面的规则中寻找。
最前面的规则是终极目标必定写在最前面,也就是最后要生成的文件。
例,Makefile的内容以下,包含条件表达式:
ifdef DEFINE_VRE
VRE = “Hello World!”
else
endif
ifeq ($(OPT),define)
VRE ?= “Hello World! First!”
endif
ifeq ($(OPT),add)
VRE += “Kelly!”
endif
ifeq ($(OPT),recover)
VRE := “Hello World! Again!”
endif
all:
@echo $(VRE)
敲入如下make命令:
make DEFINE_VRE=true OPT=define 输出:Hello World!
make DEFINE_VRE=true OPT=add 输出:Hello World! Kelly!
make DEFINE_VRE=true OPT=recover 输出:Hello World! Again!
make DEFINE_VRE= OPT=define 输出:Hello World! First!
make DEFINE_VRE= OPT=add 输出:Kelly!
make DEFINE_VRE= OPT=recover 输出:Hello World! Again!
= 与:= 的区别以下
x = foo
y = $(x) bar
x = xyz
执行后y的值为 xyz bar ,而不是 foo bar 。
x := foo
y := $(x) bar
x := xyz
执行后y的值为foo bar。