小编use*_*675的帖子

分别创建目标文件然后在Makefile中将它们链接在一起的目的是什么?

使用gcc编译器时,它将一步链接和编译.但是,将源文件转换为目标文件然后在最后链接它们似乎是惯用的.对我来说,这似乎是不必要的.这不仅会使您的目录与一堆目标文件混乱,而且当您可以简单地将所有源文件添加到编译器时,它会使Makefile复杂化.例如,我认为这很简单:

.PHONY: all

SOURCES = $(wildcard *.cpp)

all: default
default:
    g++ $(SOURCES) -o test
Run Code Online (Sandbox Code Playgroud)

整齐地成为:

g++ main.cpp test.cpp -o test
Run Code Online (Sandbox Code Playgroud)

但是,使用模式规则的更复杂的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
Run Code Online (Sandbox Code Playgroud)

对我来说,这似乎是不必要的复杂和容易出错.那么这种做法的原因是什么?

c++ makefile

6
推荐指数
2
解决办法
1006
查看次数

标签 统计

c++ ×1

makefile ×1