Makefile 是否删除循环依赖项(取决于执行文件?)

Makefile 是否删除循环依赖项(取决于执行文件?),makefile,dependencies,circular-dependency,Makefile,Dependencies,Circular Dependency,为什么在这段代码中会出现依赖项删除错误 里面一定有问题,但我找不到这个问题!这里我有自动依赖生成器。这里我有自动依赖生成器。没有最后一行: -include $(DEPFILES) 它运行正常。但当这个代码存在时,它会给我错误 也请避免仅仅因为类似的警告信息而链接到另一个问题。他们的情况不同 输出: bash ./scripts/outputs.bash bash ./scripts/simulator_outputs.bash make: Circular /usr/include/c++/

为什么在这段代码中会出现依赖项删除错误

里面一定有问题,但我找不到这个问题!这里我有自动依赖生成器。这里我有自动依赖生成器。没有最后一行:

-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.
bash./scripts/outputs.bash
bash./scripts/simulator_outputs.bash

make:Circular/usr/include/c++/4.8/iostream问题在于
%:VARLISTS$(BINDIR)/sim


这条线是一条直线,因此匹配所有目标。因此,
$(BINDIR)/sim
所依赖的一切(没有其他目标)也将(循环地)依赖于
$(BINDIR)/sim
文件/目标。

这是什么
%:
规则在那里做什么?它使一切都依赖于
VARLISTS
sim
二进制文件。这将使任何
sim
依赖于循环的东西。
%:
是默认规则。当在没有参数的情况下调用
make
时,它应该运行。它应该要求更新
VARLISTS
sim
。否,默认目标是makefile中列出的第一个目标。通常是
全部
。所以你会把
all:VARLISTS sim
放在那里
%
是一个完全不同的规则。有一个问题:是针对任何规则运行所有规则,还是仅当调用
make
时才运行该规则而不带参数?默认目标是在未指定其他目标且该目标已明确列出时运行的。它不会针对其他目标运行。如果你想运行一些东西,不管运行的目标是什么,这有点奇怪(尽管它可能有原因),我认为包含make知道如何构建的makefile是你最好的选择。
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)