【发布时间】:2011-07-29 00:00:58
【问题描述】:
我有一个包含多个 Makefile 的大型项目,我需要修改项目的构建顺序。但是,我似乎无法理解作为先决条件的变量何时被评估。我读过的所有内容似乎都表明在构建依赖图之前解析了整个 Makefile,所以我不明白为什么这个示例不起作用:
OBJECTS=main.o
EXE_NAME=test.exe
$(EXE_NAME): $(OBJECTS)
@echo PREREQUISITES: $^
@echo OBJECTS: $(OBJECTS)
$(CXX) $(CXXFLAGS) $(OBJECTS) -o $@
#include shape.mk
#----VV---Contents of shape.mk---VV----
OBJECTS+=Shape.o
OBJECTS+=Square.o
Shape.o: Shape.hpp
Square.o: Shape.hpp Square.hpp
#----^^----End of shape.mk-------^^----
main.o: Square.hpp
.PHONY: clean
clean:
-rm -fr $(OBJECTS) $(EXE_NAME)
但是,当我运行这个 Makefile 时,我得到:
PREREQUISITES: main.o
OBJECTS: main.o Shape.o Square.o
g++ main.o Shape.o Square.o -o test.exe
g++: Shape.o: No such file or directory
g++: Square.o: No such file or directory
make: *** [test.exe] Error 1
为什么构建依赖图时OBJECT没有正确的值?
【问题讨论】:
-
请注意,您也可以为此使用二级扩展。这样,作为目标或先决条件的变量可以在包含它们的规则之后定义。
标签: makefile