make默认将.c文件编译成对应的.o目标文件 对没有命令行的规则 寻找一个隐含的规则来执行
.PHONY:clean test1 test2: @echo "test:" hello:player.o lcd.o media.o gcc -o $@ $^ #%.o:%.c # gcc -o $@ -c $^ clean: rm *.o hellomake 结果:
root@ubuntu:~/lesson/chap2/2-8/2-8-1# make gcc -o hello.o -c hello.c gcc -o hello hello.o root@ubuntu:~/lesson/chap2/2-8/2-8-1# ls hello hello.c hello.o makefile取消隐含规则 使用make -r 或make -R参数取消隐含规则
命令变量 CC:编译程序,默认是cc AS:汇编程序,默认是as CXX:C++编译程序,默认g++ AR:函数库打包程序,默认是ar 命令参数变量 CFLAGS:执行CC编译器的命令行参数 CXXFLAGS:执行g++编译器命令行参数 ASFLAGS:执行汇编器AS命令行参数 ARFLAGS:执行AR命令行参数 更多参数:LDFLAGS、CPPFLAGS
.PHONY:all all: @echo "CC=$(CC)" @echo "AS=$(AS)" @echo "CXX=$(CXX)" @echo "AR=$(AR)" @echo "CFLAGS=$(CFLAGS)" @echo "CXXFLAGS=$(CXXFLAGS)" @echo "ASFLAGS=$(ASFLAGS)" @echo "ARFLAGS=$(ARFLAGS)" @echo "LDFLAGS=$(LDFLAGS)"make结果:
root@ubuntu:~/lesson/chap2/2-8/2-8-2# make CC=cc AS=as CXX=g++ AR=ar CFLAGS= CXXFLAGS= ASFLAGS= ARFLAGS=rv LDFLAGS=使用模式规则来定义一个隐式规则 模式规则,至少在规则的目标定义中包含% %:任意长度的非空字符串,表示对文件名的匹配 在目标文件名中,%匹配的部分称为“茎” 目标和目标依赖同时含有% 依赖目标的茎会传给目标 多目标模式规则 同一个模式规则可以存在多个目标 普通多目标规则:每个目标作为一个独立规则处理;多个目标对应多个独立规则。 多目标模式规则:所有规则目标共同拥有依赖文件和规则的命令行,当文件符合多个目标模式中的任何一个时,规则定义的命令执行
.PHONY:clean test1 test2: @echo "test:" hello:player.o lcd.o media.o gcc -o $@ $^ %.o:%.c gcc -o $@ -c $^ clean: rm *.o hellomake 结果:
root@ubuntu:~/lesson/chap2/2-8/2-8-1# make gcc -o hello.o -c hello.c gcc -o hello hello.o root@ubuntu:~/lesson/chap2/2-8/2-8-1# ls hello hello.c hello.o makefile