1. makefile的用途:用来描述程序编译、链接的规则,使程序编译自动化
2. makefile的构成:规则、变量
3. makefile的执行:执行make 或者 make clean等命令。
4. 格式为:/* 注意空格,“|”表示行首,“<tab>”表示table键 */
|targets : prerequisites |<tab>command
例如:
|all: led.o | arm-linux-ld -Tled.lds -o led.elf led.o | arm-linux-objcopy -O binary led.elf led.bin |led.o: led.S | arm-linux-gcc -g -c led.o led.S |.PHONY: clean |clean: | rm -f *.o *.elf *.bin
5. 变量
5.1 各种定义
variable = value
variable := value
variable += value
直接可以使用的系统变量包括:
$^:所依赖的文件 $@:目标 $<:第一个依赖的文件
用法举例:
/* 使用前 */ |app1 : app1.o func1.o func2.o | gcc app1.o func1.o func2.o -o app1 |app2 : app2.o func1.o func2.o | gcc app2.o func1.o func2.o -o app2
/* 使用后 */ |obj=func1.o func2.o |app1 : app1.o $(obj) | gcc app1.o $(obj) -o app1 | gcc app2.o $(obj) -o app2
6. 通用规则
/* 把目录中所有的.S文件汇编成.o文件 */
|%.o : %.S | gcc -g -c %^
7. 使用注意事项
1.1 同时存在 makefile 和 Makefile 两个文件,执行make,系统会先执行makefile,如果makefile不存在时,才会去执行Makefile
1.2 去回显功能:在command前加上“@”,如:
|hello : hello.c | @gcc hello.c -o helle
当然,也可以在make的时候加入[-s]选项,禁止make的一切输出信息
1.3 如果makefile更名未file,要make的时候,可加上[-f]选项指定makefile的替代文件,如:
make -f file make -f file clean
object_file : test.c
gcc -c test.c
object_file : test.c
gcc -c test.c -o obj.o
object_file : test.c
gcc -c $^ -o $@
<span style="font-size:18px;">.PHONY: all clean
all :
$(MAKE) -C source_1
$(MAKE) -C source_2
clean :
$(MAKE) clean -C source_1
$(MAKE) clean -C source_2</span>
<span style="font-size:18px;">test : test.c
gcc $^ -o $@
.PHONY: clean
clean :
-rm test</span>
<span style="font-size:18px;">ifeq ($(var_1),$(var_2))
@echo var_1 = var_2
endif</span>