Dependencies 如何在gnu make中设置跨目录依赖项

Dependencies 如何在gnu make中设置跨目录依赖项,dependencies,g++,makefile,build-automation,Dependencies,G++,Makefile,Build Automation,我在多个目录中使用了一组通用的make规则。每个品牌都非常简单: BASEDIR:=../.. TARGET:=theTarget include Makefile.include 除非重写,否则源代码有一个默认值: SRC:= $(wildcard *.cpp) 我们希望在一个目录中构建目标文件(而不是源文件),因此: 所以我有.o文件,但我需要每个文件根据.cpp触发一个规则 只要知道目录,这就很容易: $(OBJDIR)/%.o: %.cpp 但在某些目录中,子目录中有任意分组的文件

我在多个目录中使用了一组通用的make规则。每个品牌都非常简单:

BASEDIR:=../..
TARGET:=theTarget
include Makefile.include
除非重写,否则源代码有一个默认值:

SRC:= $(wildcard *.cpp)
我们希望在一个目录中构建目标文件(而不是源文件),因此:

所以我有.o文件,但我需要每个文件根据.cpp触发一个规则 只要知道目录,这就很容易:

$(OBJDIR)/%.o: %.cpp
但在某些目录中,子目录中有任意分组的文件。我暂时通过在我的中央makefile中硬编码所有这些文件来解决这个问题:

$(OBJDIR)/%.o: a/%.cpp
    build...
$(OBJDIR)/%.o: b/%.cpp
    build...
但是如果可能的话,我想做的是能够在变量中指定构建目录。有没有办法设置依赖项

$(OBJDIR)/x.o: a/x.cpp
$(OBJDIR)/y.o: a/y.cpp

不必手动列出依赖项

就这点而言,我还有依赖文件(.d)

我想根据源代码中的任何内容设置依赖项。 例如: .deps/x.d:a/x.cpp g++-MM-MT$(objdir)/$(notdir$@)$<-o$(DEPDIR)/$(notdir$@)

有没有一种简单的方法可以生成这些规则而不必为每个目录编写它们

我首先从这里获得了有关生成.d文件的信息:

最终的目标是包含所有的.d文件,并从这些文件自动生成依赖树。但这是最后一部分。我不知道如何使用.d文件。我只是把它们都包括在内吗

include $(DEPDIR)/%.d
不起作用

我可以用一条规则将它们全部归类: cat$(DEP)>$(DEPDIR)/deps.inc

然后

include deps.inc

首先,要处理源目录:

vpath %.cpp a b

$(OBJDIR)/%.o: %.cpp
    build...
然后,如果需要,可以生成如下依赖项文件:

# Might as well use DEPDIR, rather than "deps"

$(DEPDIR)/%.d: %.cpp 
    g++ -MM ...

# Note the wildcard. And the '-' at the beginning means
# "don't panic if there aren't any".

-include $(DEPDIR)/*.d
但是有一个更好的方法,在你引用的资料中有描述。不要为
.d
文件制定规则,只需按照构建对象文件的相同规则构建它们。这样,除非您确实需要它们,否则您不会构建它们。

感谢include$(DEPDIR)/*.d
include deps.inc
vpath %.cpp a b

$(OBJDIR)/%.o: %.cpp
    build...
# Might as well use DEPDIR, rather than "deps"

$(DEPDIR)/%.d: %.cpp 
    g++ -MM ...

# Note the wildcard. And the '-' at the beginning means
# "don't panic if there aren't any".

-include $(DEPDIR)/*.d