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
LDLIBS += -lkernel32 -luser32 -lgdi32