1、Makefile中的宏定义
-D 增加编译宏定义;-I增加头文件搜索路径;
示例:CFLAGS+=-D __CUSTOMER_CODE__,
则编译时,只编译__CUSTOMER_CODE__宏定义的代码
示例二:
INCS = -I $(ENX)
INCS += -I ./ \
-I include \
指定头文件查找的目录。
==================================================
2、ifeq else endif 条件编译,表示条件相等时执行某段代码
ifeq ( $(CLSO),GITW)
C_PREDEF +=-D __$(CLON)__
else
C_PREDEF+=-D __CUSTOMER_CODE__
endif
==================================================
3、@ 在makefile 中语句前面表示,该语句不被回显出来。
4、$(MAKE) 表示预设的make命令的名称(路径),类似于预定义变量。
5、 -f 指定特定路径的makefile 文件
示例:$(MAKE) -f make/gcc_makefile
6、include 将指定文件包涵到当前的文件中,
示例:若在文件x 中增加:include make\gcc_make,将gcc_make 文件包涵在文件x中
==================================================================
7、export 向子make进程输出变量
示例::
all:
@$(MAKE) -f make/gcc_makefile
include make\gcc\gcc_makedef
export GCC_INSTALL_PATH C_PREDEF
将GCC_INSTALL_PATH C_PREDEF 传递给即将执行的gcc_makedef文件。
===============================================================
8、install 相当于文件拷贝
用于将文件拷贝到指定目录。需要目标地址存在
若目标地址不存在的情况下,使用install -d, 会自动创建目录
9、wildcard 扩展通配符,将指定目录下指定类型的所有文件展开(因为在变量的定义和函数引用时,原有通配符将失效),格式:$(wildcard PATTERN...)
patsubst 替换通配符,将指定文件替换。
notdir 去除路径通配符
示例:${patsubst %.c, %, ${wildcard *.c}}
wildcard -- 路径下的所有.c文件
patsubst --- 将路径下所有符合.c格式的文件替换
src = $(wildcard *.c ./test/*.c) ---- 输出 a.c b.c ./test/ax.c ./test/bx.c
dir=$(notdir $(src)) --- 把路径中展开的文件去掉路径:使用notdir后, 输出为 a.c b.c ax.c bx.c
10、% : %.c
$(CC) $(CFLAGS) $< -o $@
%:%.c 将所有.c文件编译为对于的目标文件
$@ 表示目标文件
$^ 表示所有的依赖文件
$< 表示第一个依赖文件
$? 表示比目标还要新的依赖文件列表
//================================================
11、赋值运算符 = 、:=、?= 、+=
11.1 使用 = 给变量赋值时,变量的值可以随赋值之后的定义变化。示例:
a = test
b = $(a)
a = testx
此时b = testx
11.2 使用:=赋值时,变量的值等于赋值前定义好的值
a = test
b = $(a)
a = testx
此时b = test
11.3 使用?=赋值时,若变量之前被赋值过,则不再赋值,否则赋值为当前值。
a = test
b = $(a)
b ?= testx
此时b = test
a = test
b ?= testx
此时b = testx
11.4 +=为追加赋值,在原有赋值的情况下,追加赋值,
a = test.o test1.o
a+= test2.o
则 当前a = test.o test1.o test2.o