【发布时间】:2015-03-24 20:23:54
【问题描述】:
为什么我在这段代码中出现依赖删除错误?
里面肯定有问题,但是我找不到这个问题!这里我有自动依赖生成器。这里我有自动依赖生成器。没有最后一行:
-include $(DEPFILES)
运行正常。但是当这段代码存在时,它会给我错误。
还请避免仅仅因为类似的警告消息而链接到另一个问题。他们的情况不同。
输出:
bash ./scripts/outputs.bash
bash ./scripts/simulator_outputs.bash
make: Circular /usr/include/c++/4.8/iostream <- bin/sim dependency dropped.
make: Circular /usr/include/c++/4.8/ostream <- bin/sim dependency dropped.
make: Circular /usr/include/c++/4.8/ios <- bin/sim dependency dropped.
make: Circular /usr/include/c++/4.8/iosfwd <- bin/sim dependency dropped.
make: Circular /usr/include/c++/4.8/cwchar <- bin/sim dependency dropped.
make: Circular /usr/include/c++/4.8/exception <- bin/sim dependency dropped.
make: Circular /usr/include/c++/4.8/clocale <- bin/sim dependency dropped.
make: Circular /usr/include/c++/4.8/cctype <- bin/sim dependency dropped.
make: Circular /usr/include/c++/4.8/string <- bin/sim dependency dropped.
make: Circular /usr/include/c++/4.8/new <- bin/sim dependency dropped.
make: Circular /usr/include/c++/4.8/bits/basic_string.tcc <- bin/sim dependency dropped.
make: Circular /usr/include/c++/4.8/bits/locale_classes.tcc <- bin/sim dependency dropped.
make: Circular /usr/include/c++/4.8/streambuf <- bin/sim dependency dropped.
make: Circular /usr/include/c++/4.8/bits/streambuf.tcc <- bin/sim dependency dropped.
make: Circular /usr/include/c++/4.8/cwctype <- bin/sim dependency dropped.
make: Circular /usr/include/c++/4.8/bits/locale_facets.tcc <- bin/sim dependency dropped.
make: Circular /usr/include/c++/4.8/bits/basic_ios.tcc <- bin/sim dependency dropped.
make: Circular /usr/include/c++/4.8/bits/ostream.tcc <- bin/sim dependency dropped.
make: Circular /usr/include/c++/4.8/istream <- bin/sim dependency dropped.
make: Circular /usr/include/c++/4.8/bits/istream.tcc <- bin/sim dependency dropped.
make: Circular /usr/include/c++/4.8/cmath <- bin/sim dependency dropped.
make: `VARLISTS' is up to date.
生成文件:
SOURCES := test.cpp
OUTDIR:= ./out
BINDIR:= ./bin
OBJDIR:= ./bin/obj
OBJECTS := $(addprefix $(OBJDIR)/,$(SOURCES:.cpp=.o))
DEPFILES:= $(OBJECTS:.o=.d)
VARLISTS:= ./app/outputs.list
CXX := g++
CXXFLAGS := -c -g -MD -MP
# default
%: VARLISTS $(BINDIR)/sim
@
VARLISTS:
bash ./scripts/outputs.bash
bash ./scripts/simulator_outputs.bash
$(BINDIR)/sim: $(OBJECTS)
$(CXX) $(LDFLAGS) $^ -o $@
$(OBJDIR)/%.o: %.cpp
@if [ ! -d "$(OBJDIR)" ]; then mkdir -p $(OBJDIR) && echo "$(OBJDIR) directory created: $(OBJDIR)"; fi
$(CXX) $(CXXFLAGS) -MF $(OBJDIR)/$*.d -o $@ $<
-include $(DEPFILES)
【问题讨论】:
-
%:规则在那里做什么?它使一切都依赖于VARLISTS和sim二进制文件。这将使sim依赖于循环的任何东西。 -
%:是默认规则。它应该在make被无参数调用时运行。它应该要求VARLISTS和sim都被更新。 -
不,默认目标是makefile中列出的第一个目标。通常是
all。所以你会把all: VARLISTS sim放在那里。%是 match-anything rule,这相当不同。 -
一个问题:是针对任何规则运行,还是仅在无参数调用
make时运行? -
默认目标在没有给出其他目标时运行,并且当它专门列出该目标时。它不适用于其他目标。如果您希望无论运行什么目标都运行某些东西,这有点奇怪(尽管它可能有原因),并且我认为包含的 makefile 知道如何构建是您的最佳选择。
标签: makefile dependencies circular-dependency