我有这些文件制作始终运行为目标 “所有”,即使没有什么更新
- Test.cpp的
- Point.h
- Point.cpp
- Triangle.h
- Triangle.cpp
我想要一个makefile,允许我构建每个类Point
和Triangle
分别通过在需要时发布make Point
或make Triangle
(头文件或源文件已更改)。如果需要,make all
应编译所有内容并构建输出程序Test
。
这就是我来了这么远:
CXX=g++
CXXFLAGS=-std=c++11 -Wall -pedantic
OBJS=Test.o Point.o Triangle.o
all : $(OBJS)
$(CXX) $(CXXFLAGS) $(OBJS) -o Test
Point.o : Point.cpp Point.h
$(CXX) $(CXXFLAGS) -c Point.cpp
Point : Point.o
Triangle.o : Triangle.h Triangle.cpp Point.h
$(CXX) $(CXXFLAGS) -c Triangle.cpp
Triangle : Triangle.o
clean:
\rm *.o Test
.PHONY : Point Triangle
看来工作,但问题是,当我运行make all
(或只是make
)多次运行,即使没有命令已经改变,给出以下输出:
g++ -std=c++11 -Wall -pedantic Test.o Point.o Triangle.o -o Test
我希望它能说出类似于“没有任何事情要为'全部'”。或类似的东西,就像其他目标一样。我错过了什么?
他的“全部”取决于“Test.o Point.o Triangle.o”。一旦创建了这些内容,重复构建不应该跳过该过程吗? – blackpen
@blackpen不,它不会那样工作。 'all'不是一个真正的目标,它没有一个可以比较时间戳的实际文件。 – taskinoor
是的,当然。 “全部”不存在,因此时间戳也不存在。所以,它重新启动。 – blackpen