如果main.cpp、hello.cpp、factorial.cpp中的任何一个被更改,Makefile将构建hello可执行文件。实现该规范的最小Makefile可以是:
hello: main.cpp hello.cpp factorial.cpp
g++ -o hello main.cpp hello.cpp factorial.cpp
教授:非常容易阅读
缺点:维护的噩梦,c++依赖的复制
缺点:效率问题,我们重新编译所有c++,即使只改变了一个
为了改进上面的内容,我们只编译那些经过编辑的c++文件。然后,我们只需将结果对象文件链接在一起。
OBJECTS=main.o hello.o factorial.o
hello: $(OBJECTS)
g++ -o hello $(OBJECTS)
main.o: main.cpp
g++ -c main.cpp
hello.o: hello.cpp
g++ -c hello.cpp
factorial.o: factorial.cpp
g++ -c factorial.cpp
利:修复效率问题
缺点:新的维护噩梦,目标文件规则上的潜在错字
为了改进这一点,我们可以用一个.cpp替换所有的对象文件规则。o规则:
OBJECTS=main.o hello.o factorial.o
hello: $(OBJECTS)
g++ -o hello $(OBJECTS)
.cpp.o:
g++ -c $< -o $@
优点:回到一个简短的makefile,有点容易阅读
这里是。cpp。O规则定义了如何构建任意文件。O从anyfile.cpp。
$<匹配第一个依赖项,在本例中为anyfile.cpp
$@匹配目标,在本例中为anyfile.o。
Makefile中的其他更改包括:
更容易将编译器从g++更改为任何c++编译器。
使更改编译器选项更容易。
使它更容易改变链接器选项。
使更改c++源文件和输出变得更容易。
添加了一个默认规则'all',它可以作为一个快速检查,以确保在尝试构建应用程序之前,所有的源文件都存在。