包含取决于目标的文件

Chr*_*dle 5 makefile

我有一个 Makefile,其中包含子目录中的 makefile。但是,我想要的是基于所选目标包含这些“子”makefile。

背景是,子 makefile 定义了不同的目标文件,并且根据这些目标文件应该创建目标可执行文件。

假设 sub-makefile1 设置变量

对象 := foo.o foo1.o

子 makefile2 集

对象 := bar.o bar1.o

通用规则是:

lib/%.so: $(对象)
    链接 $^ -o $@

目标是(例如):

foo: lib/foo.so
酒吧:lib/bar.so

而目标 foo 应该包含 foo makefile,目标 bar 应该包含 bar-makefile。

知道如何处理这种情况吗?

谢谢,克里斯蒂安

Bet*_*eta 2

你所要求的具体事情——条件包含——在Make中是很困难的。这是可以做到的,但并不优雅。

有多种方法可以获得您想要的效果。您可以在 MAKECMDGOALS 上使用条件。您可以让您的 makefile 调用第二个 makefile,并将其传递给要使用的子目录的名称。但是(在不了解更多情况的情况下)我认为这种方式是最简洁的:

include sub-makefile1
FOO_OBJECTS := $(OBJECTS)

include sub-makefile2
BAR_OBJECTS := $(OBJECTS)

lib/%.so:
    link $^ -o $@

lib/foo.so: $(FOO_OBJECTS)

lib/bar.so: $(BAR_OBJECTS)

foo bar : % : lib/%.so
Run Code Online (Sandbox Code Playgroud)

(您可以巧妙地使用变量名称,例如foo_OBJECTS保存一两行,但我建议不要这样做。)