gpt4 book ai didi

makefile - makefile 先决条件中的变量

转载 作者:行者123 更新时间:2023-12-03 06:28:06 25 4
gpt4 key购买 nike

是否可以在先决条件中使用 makefile 变量?我下面的示例有点落后,但应该演示我想要实现的目标:

objects_subsystem1 := $(patsubst %.c,%.o,$(wildcard ../src/ss1/*.c))
objects_subsystem2 := $(patsubst %.c,%.o,$(wildcard ../src/ss2/*.c))

all : subsystem1.elf subsystem2.elf

%.elf : $(objects_%)
$(LD) $< -o $@

编辑:我正在使用 GNU Make 3.80,因此不幸的是 SECONDEXPANSION 不可用!

最佳答案

是的,如果您使用的是 GNUMake:

.SECONDEXPANSION:
%.elf : $$(objects_%)
$(LD) $< -o $@

编辑:

正如 @bobbogo 指出的,有一个不需要 .SECONDEXPANSION 的解决方案。首先,我们阐明规则:

objects_subsystem1 := $(patsubst %.c,%.o,$(wildcard ../src/ss1/*.c))
objects_subsystem2 := $(patsubst %.c,%.o,$(wildcard ../src/ss2/*.c))
objects_subsystem3 := $(patsubst %.c,%.o,$(wildcard ../src/ss3/*.c))

all : subsystem1.elf subsystem2.elf subsystem3.elf

subsystem1.elf : $(objects_subsystem1)
$(LD) $< -o $@
subsystem2.elf : $(objects_subsystem2)
$(LD) $< -o $@
subsystem3.elf : $(objects_subsystem3)
$(LD) $< -o $@

然后我们稍微重新安排一下:

objects_subsystem1 := $(patsubst %.c,%.o,$(wildcard ../src/ss1/*.c))
all : subsystem1.elf
subsystem1.elf : $(objects_subsystem1)
objects_subsystem2 := $(patsubst %.c,%.o,$(wildcard ../src/ss2/*.c))
all : subsystem2.elf
subsystem2.elf : $(objects_subsystem2)
objects_subsystem3 := $(patsubst %.c,%.o,$(wildcard ../src/ss3/*.c))
all : subsystem3.elf
subsystem3.elf : $(objects_subsystem3)

%.elf :
$(LD) $< -o $@

然后我们使用eval函数:

define RULE_TEMPLATE
objects_subsystem$(1) := $(patsubst %.c,%.o,$(wildcard ../src/ss$(1)/*.c))
all : subsystem$(1).elf
subsystem$(1).elf : $$(objects_subsystem$(1))
endef

$(eval $(call RULE_TEMPLATE,1))
$(eval $(call RULE_TEMPLATE,2))
$(eval $(call RULE_TEMPLATE,3))

%.elf :
$(LD) $< -o $@

然后用一个循环结束(如果值得的话):

define RULE_TEMPLATE
objects_subsystem$(1) := $(patsubst %.c,%.o,$(wildcard ../src/ss$(1)/*.c))
all : subsystem$(1).elf
subsystem$(1).elf : $$(objects_subsystem$(1))
endef

SUBSYSTEMS := 1 2 3 # this can be made automatic...

$(foreach sys,$(SUBSYSTEMS),$(eval $(call RULE_TEMPLATE,$(sys))))

%.elf :
$(LD) $< -o $@

关于makefile - makefile 先决条件中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16267379/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com