使用gcc编译器时,它会在一个步骤中链接和编译。然而,将源文件转换为目标文件,然后在最后进行链接似乎是惯用的方法。对我来说,这似乎是不必要的。这不仅会在您的目录中混杂一堆目标文件,而且当您可以简单地将所有源文件附加到编译器时,它还会使Makefile变得复杂。例如,以下是我认为很简单的示例:
然而,使用模式规则的更复杂的Makefile会使每个文件的输出变得混乱。例如:
在我看来,这似乎是不必要的复杂和容易出错的。那么采用这种做法的原因是什么?
.PHONY: all
SOURCES = $(wildcard *.cpp)
all: default
default:
g++ $(SOURCES) -o test
这可以很好地转化为:
g++ main.cpp test.cpp -o test
然而,使用模式规则的更复杂的Makefile会使每个文件的输出变得混乱。例如:
.PHONY: all
SOURCES = $(wildcard *.cpp)
OBJECTS = $(SOURCES:.cpp=.o)
%.o: %.cpp
g++ -c -o $@ $<
all: default
default: $(OBJECTS)
g++ -o test $^
clean:
rm -rf *.o
g++ -c -o main.o main.cpp
g++ -c -o test.o test.cpp
g++ -o test main.o test.o
在我看来,这似乎是不必要的复杂和容易出错的。那么采用这种做法的原因是什么?