1、Makefile中的自动化变量
$* 不包含扩展名的目标文件名称 $@ 目标的完整名称 $% 如果目标是归档成员,则该变量表示目标的归档成员的名称 $< 第一个倚赖 $^ 所有的倚赖文件,去重 $+ 所有的倚赖文件,不去重 $? 所有的倚赖文件,以空格隔开。这些倚赖文件的修改日期比目标的创建日期晚 |
2、make 命令的查找顺序是,在同一个文件夹下
GUNmakefile————>makefile——————>Makefile
现在一般使用Makefile
3、Makefile中的赋值表达式
= 有递推功能,可往下寻找 :=不可往下寻找 +=直接在原有的字符串后面补充 |
4、两个常用函数:
SRCE = $(wildcard *.c) 列出当前目录下所有的.c文件
OBJS = $(patsubst %.c,%.o,$(SRCE)) 把任意的.c文件替换为.o文件
其中%通配符一般用在.c和.o文件的的转换部分
实例如下:
当前文件的结构
0414
make
main.c
foo1.c
foo2.c
foo3.c
Makefile
inc
head.h
5、for ifeq ifneq 的用法 ,先来示例:
Makefile书写规则规定:每个makefile命令必须以Tab键缩进,所以:
(1)、使用一般指令这些语句的时候不要通过Tab键缩进,
(2)、要么就写在同一行,通过分号隔开。
6、Makefile指令前加"-"表示出现错误,不中断,继续执行下面的语句
Makefile指令前加"@"表示隐藏命令提示
7、一般安装指令和卸载指令是删除一些文件,所以也通过Makefile来编写规则
install:
cp hello /user
uninstall:
rm /user/hello
8、嵌套Makefile,具体看例子
(1) $(MAKE) -C 路径
等价于 make -C 路径
意思就是先打开路径,然后执行make指令,这样是便于维护。
(2)export CC OBJS BIN OBJS_DIR
例如上述那个例子,我们通过export命令,将顶层Makefile所定义的变量传递到下级目录的Makefile下,但是不覆盖下层Makefile所定义的变量,除非指定了 -e
顶层的Makefile叫做总控Makefile