将最顶层的Makefile参数往下层传输
时间: 2024-09-09 09:11:14 浏览: 65
在 Linux 内核开发中,当你有一个复杂的 Makefile 架构,比如有多个目录和子Makefile时,如果需要在最顶层的 Makefile 中设置的一些参数传递给下层的 Makefile,通常会通过变量赋值并利用`$(call)`或`.PHONY`规则来实现。例如:
```make
# 最顶层 Makefile
ifeq ($(CONFIG_FOO),y)
KBUILD_EXTRA_CFLAGS += -DFOO_ENABLED
endif
.PHONY: all subdirs
all: $(subdir_objs)
subdirs: ; @$(foreach subdir,$(SUBDIRS),$(MAKE) -C $(subdir);)
%.o: %.c
$(CC) $(KBUILD_CFLAGS) -c $< -o $@
```
在这个例子中,`KBUILD_EXTRA_CFLAGS`是一个自定义的变量,它会被包含到所有子目录(通过`subdirs`目标)的编译选项中。当`CONFIG_FOO`配置项开启时,`KBUILD_EXTRA_CFLAGS`会被设置为`-DFOO_ENABLED`,这个标志会在子目录的编译过程中生效。
如果你需要传递其他参数,只需在下层 Makefile 中使用相同的变量名即可获取到。然而,记住`$(call)`可以帮助你在调用子 Makefile 时传递完整的参数列表,而不仅仅是单一变量。
阅读全文