gpt4 book ai didi

c - 制作 Target 依赖源列表

转载 作者:行者123 更新时间:2023-11-30 15:47:19 24 4
gpt4 key购买 nike

我想用一个 Makefile 编译两个略有不同版本的 C 代码。

基本上我只需要添加一些标志和一些源文件。

现在我已经有了源列表的定义:

SRC := <adding stuff>

并从中生成我的对象:

OBJ = $(SRC:%.c=$(OBJS_DIR)/%.o) $(ASRC:%.s=$(OBJS_DIR)/%.o)

“all”目标应该正常编译,“iomodule”目标更改变量并调用“all”:

.PHONY: iomodule
iomodule: CDEFS := $(subst -DFD_MODULE, -DIO_MODULE, $(CDEFS))
#iomodule: SRC += $(subst $(SRC_DIR)/,,$(wildcard $(SRC_DIR)/iomod*.c))
iomodule: SRC += iomod_ring_proto.c
iomodule: OBJ += $(OBJ_DIR)/iomod_ring_proto.o
#iomodule: $(info $(SRC))
iomodule: all

all: dirs STM32F100RB_FLASH.ld $(OBJ)
$(CC) -o $(TARGET).elf $(LDFLAGS) $(OBJ) $(LDLIBS)
$(OBJCOPY) -O ihex $(TARGET).elf $(TARGET).hex
$(OBJCOPY) -O binary $(TARGET).elf $(TARGET).bin

我原以为“info”会打印包含“iomod_ring_proto.c”的 SRC,而 OBJ(因为它是递归变量)会包含 *.o 文件。

奇怪的是,“info”打印没有文件的列表,并且“iomod_ring_proto.c”从未被编译。但我收到链接器错误,未找到“objs/iomod_ring_proto.o”。那么我打印时它不在SRC列表中,编译时不在OBJ列表中,但在链接时它在OBJ列表中?这是怎么回事??

最佳答案

加载 makefile 后,会立即评估 Make 命令,例如 $(info)。这就是为什么它显示 $(SRC) 的“全局”值。

不包含目标文件的链接的问题是,加载文件时,依赖项也会“评估”。这意味着对于您的 all 目标,依赖项将设置为加载文件时的 OBJ

关于c - 制作 Target 依赖源列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17490098/

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