gpt4 book ai didi

c - Makefile - 用函数替换冗余

转载 作者:太空宇宙 更新时间:2023-11-04 04:21:56 24 4
gpt4 key购买 nike

我努力编写了一个好的通用 makefile 来为许多项目、许多目标编译位于不同目录中的许多源代码(make 将来会接受很多参数)。作为 make-tool 的初学者,我搜索了很多示例,并寻找了许多问题来完成我的工作。要构建所有对象,我使用以下目标:

$(OBJDIR)/%.o:
@mkdir -p $(dir $@)
@echo Compiling $(subst $(OBJDIR),,$(@:%.o=%.c))
@echo -e \t '>' $@
@$(ARCH)gcc $(CFLAGS) -MMD -MP -MF"$(DEPDIR)/$(@F:.o=.d)" -MT"$(@F:%.o=%.o)" -MT"$(@F:%.o=%.d)" $(SRCFLAGS) $(subst $(OBJDIR)/,,$(@:%.o=%.c)) -o $@

如何将 $(subst $(OBJDIR),,$(@:%.o=%.c)) 替换为从 .o 文件获取 .c 文件的函数?然后目标将如下所示:

$(OBJDIR)/%.o:$(call obj_to_src ...)
@mkdir -p $(dir $@)
@echo Compiling $<
@echo -e \t '>' $@
@$(ARCH)gcc $(CFLAGS) -MMD -MP -MF"$(DEPDIR)/$(@F:.o=.d)" -MT"$(@F:%.o=%.o)" -MT"$(@F:%.o=%.d)" $(SRCFLAGS) $< -o $@

请注意,我的来源具有以下结构:

$(WORKSPACE)/app/*.c
$(WORKSPACE)/efsl/*.c
$(WORKSPACE)/*/*.c

对象将具有以下结构:

OBJS = $(addprefix $(OBJDIR), $(subst $(WORKSPACE),,$(SRCS:.c=.o)))
.build/$(PROJECT)/$(CONFIG)/obj/app/*.o
.build/$(PROJECT)/$(CONFIG)/obj/*/*.o

对于那些对我的 makefile 感兴趣的人,我将其附加到此链接 https://www.dropbox.com/s/eu07o41uz3jvb2k/makefile?dl=0

最佳答案

通过使用 $(OBJDIR)/%.o:$(WORKSPACE)/%.c 解决。所有源都位于 $(WORKSPACE)

下的子文件夹中

关于c - Makefile - 用函数替换冗余,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45985928/

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