我有一个 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。
知道如何处理这种情况吗?
谢谢,克里斯蒂安
你所要求的具体事情——条件包含——在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保存一两行,但我建议不要这样做。)