黑马linux编程学习笔记
makefile
-
文件命名:
全部小写
makefile
或者首字母大写,其余字母小写Makefile
-
makefile规则的三要素:
目标、依赖、命令
makefile的三个自动变量~只能出现在规则的命令中
$< :规则中的第一个依赖
$@:规则中的目标
$^:规则 中的所有依赖
-
makefile默认的编译参数,makefile文件中可以修改
AR 库文件维护程序的名称。默认值为ar
AS 汇编程序的名称,默认值为as
CC C编译器的名称,默认为cc
CPP C预编译器的名称,默认值为$(CC) -E
CXX C++编译器的名称,默认值为g++
FC FORTRAN编译器的名称,默认值为f77
ARFLAGS 库文件维护的程序选项,无默认值
ASFLAGS 汇编程序的选项,无默认值
CFLAGS C编译器的选项,无默认值
CPPFLAGS C预编译的选项,无默认值
CXXFLAGS C++编译器的选项,无默认值
FFLAGS FORTRAN编译器的选项,无默认值
AR 函数库打包程序,可创建静态库.a文档。默认是"ar"。
AS 汇编程序。默认是"as"。
CC C编译程序。默认是"cc"。
CXX C++编译程序。默认是"g++"。
CPP C/C++预处理器。默认是"$(CC) -E"。
FC Fortran编译器。默认是"f77"。
PC Pascal语言编译器。默认是"pc"。
YACC Yacc文法分析器。默认是"yacc"。ARFLAGS 函数库打包程序的命令行参数。默认值是"rv"。
ASFLAGS 汇编程序的命令行参数。
CFLAGS C编译程序的命令行参数。
CXXFLAGS C++编译程序的命令行参数。
CPPFLAGS C/C++预处理器的命令行参数。
FFLAGS Fortran编译器的命令行参数。
PFLAGS Pascal编译器的命令行参数。
YFLAGS Yacc文法分析器的命令行参数。
LDFLAGS 链接器的命令行参数。 -
样例脚本
#obj=main.o add.o sub.o mul.o target=app #查看当前目录下的.c文件赋值给变量src src=$(wildcard ./*.c) # 把变量src中的.c 替换成.o obj=$(patsubst ./%.c, ./%.o, $(src)) #CC=gcc #CPPFLAGS= -I $(target):$(obj) $(CC) $(obj) -I./include -o $(target) %.o:%.c $(CC) -c -I./include $< -o $@ #声明clean为伪目标 .PHONY:clean clean: #-rm #前面加- 这条命令失败了,继续执行后续命令 #前面没- 这条命令失败后,后续命令也不会执行 rm $(obj) $(target) -f #这种可以测试默认的参数 hello: echo $(CC) $(CPPFLAGS)