makefile上的行顺序

makefile上的行顺序,makefile,gnu-make,Makefile,Gnu Make,我有main.cpp(包括main函数)和func1.cpp,我想用一个makefile链接这些文件。经典的形式是: main: main.o func1.o g++ main.o func1.o -o main main.o: main.cpp g++ -c main.cpp func1.o: func1.cpp g++ -c func1.cpp 或者一个人可以写 main: func1.o main.o g++ main.o func1.o -o main

我有main.cpp(包括main函数)和func1.cpp,我想用一个makefile链接这些文件。经典的形式是:

main: main.o func1.o
    g++ main.o func1.o -o main
main.o: main.cpp
    g++ -c main.cpp
func1.o: func1.cpp
    g++ -c func1.cpp
或者一个人可以写

main: func1.o main.o 
    g++ main.o func1.o -o main
func1.o: func1.cpp
    g++ -c func1.cpp
main.o: main.cpp
    g++ -c main.cpp


最后两个和经典的有什么不同吗?一个规则比另一个规则有优势吗?

不,规则的顺序只在您输入
make
时起作用,在这种情况下,它可以选择第一个规则作为默认规则


除此之外,
make
足够智能,可以执行依赖规则,无论它们在文件中的什么位置。

这三组规则之间没有区别。但是,
make
知道如何将
.cpp
文件构建到目标文件中,因此您真正需要的是:

main: main.o func1.o
        g++ main.o func1.o -o $@

或者
g++$^-o$@
来避免重复你自己。
main: main.o func1.o
        g++ main.o func1.o -o $@