【发布时间】:2011-12-21 03:58:23
【问题描述】:
我对 (GNU) Make 比较陌生,发现它非常困难。我考虑改用 SCons,但我还是想了解一下。
我在一个文件夹中有一个 makefile,它包含子目录 ./src、./obj/[release|debug] 和 ./bin[release|debug]。 makefile 应该能够获取 ./src 中的 C++ 源代码,将它们编译为相应 ./obj 目录中的目标文件,并链接这些目标文件并将结果放入相应的 ./bin 目录中。这是我的makefile(为简单起见进行了编辑):
CONFIG = release
#CONFIG = debug
OBJS = Container.o
OBJDIR = obj/$(CONFIG)
BINDIR = bin/$(CONFIG)
VPATH = src $(BINDIR)
vpath %.o $(OBJDIR)
.PHONY: release
release: $(OBJS)
$(CXX) $(LXXFLAGS) -o $(BINDIR)/$@ $^
Container.o: Container.cpp Container.hpp
$(CXX) -c $(CXXFLAGS) -o $(OBJDIR)/$@ $<
我第一次运行 make 时,“发布”目标将在当前文件夹以及 $(OBJDIR) 中搜索“Container.o”。找不到它,将正确执行 secong 目标,在正确的文件夹中生成目标文件。然后“release”目标将执行,但链接器会抱怨“Container.o”未找到...
我第二次运行 make 时,“发布”目标将搜索“Container.o”并在 $(OBJDIR) 中找到它。然后链接器将正确执行(找到“Container.o”的路径被添加到文件名之前)。
有没有办法让它一次通过?它让我发疯!
【问题讨论】:
-
您尝试过交换规则吗?先放Container.o规则,再放release规则。
标签: makefile