makefile中默认的一些规则,make可以自动推导出的规则,无需手写
1.什么是隐式规则
make最早出现是为了构建C/C++项目的,C/C++中有一些常用的规则被make当作默认的规则了,也就是说你不用写,make就能推导出来的。
例如,把 .c 文件编译成 .o 文件这一规则,你根本就不用写出来,make 会自动推导出这种规则,并生成我们需要的 .o 文件。
2.常用隐式规则
2.1 编译C项目
如果需要目标依赖.o文件,make会自动寻找对应的.c文件,并通过默认的生成方法来生成它。
demo:demo.o |
$(CC) -c -o demo.o demo.c $(CPPFLAGS) $(CFLAGS) |
2.2编译C++项目
从.cc .cpp .C到.o
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c |
2.3链接
由.o文件链接到可执行文件
$(CC) $(LDFLAGS) *.o $(LOADLIBES) $(LDLIBS) |
3.隐式规则常用变量
3.1 CC
编译C语言的程序,默认为 cc
3.2CXX
编译C++的程序,默认为 g++
3.3AR
归档程序,默认为 ar
3.4CPP
C语言预处理程序,默认为 $(CC) -E
3.5RM
删除文件的程序,默认为rm -f
3.6CFLAGS
传递给C编译器的一些选项,如-O2 -Iinclude
3.7CXXFLAGS
传递给C++编译器的一些选项,如-std=c++ 11 -fexec-charset=GBK
3.8CPPFLAGS
C语言预处理的一些选项
3.9LDFLAGS
链接选项,如-L.
3.10LDLIBS
链接需要用到的库,如-lkernel32 -luser32 -lgdi32
如果我们需要对编译链接相关的变量进行修改,建议的做法是使用追加赋值的形式
CFLAGS += -O2 -Iinclude |