gpt4 book ai didi

c - Makefile 不允许增量构建

转载 作者:太空狗 更新时间:2023-10-29 16:06:53 25 4
gpt4 key购买 nike

我有一个来自示例项目的 makefile,不幸的是,当项目中的任何单个文件发生更改时,它会强制重新构建。我对 makefile 没有太多经验,所以我不确定如何解决这个问题。

makefile 将要编译的文件定义为单个变量 SRCS,如下所示。当然,此列表中大约有 40 个文件,位于多个不同的目录中。

SRCS = \
../../src/file1.c \
../../src/file2.c

然后它为从每个 .c 文件生成的每个 .o 文件定义构建规则。

$(OBJ_PATH)/%.o: $(SRCS)
$(CC) $(FLAGS) $(filter %/$(subst .o,.c,$(notdir $@)), $(SRCS)) -o $@

根据带-d选项的make运行,当单个.c文件改变时所有目标文件必须重新编译,因为$(SRCS ) 定义为上面的依赖。

如果单个文件仅更改了 1 个 .o 文件,我该如何更改它必须重新编译?

最佳答案

另一种解决方案是使用 vpath。示例代码:

OBJ_PATH := build

SRCS := \
src/foodir/foo.c \
src/bardir/bar.c

OBJS := $(addprefix $(OBJ_PATH)/,$(notdir $(SRCS:%.c=%.o)))

vpath %.c $(dir $(SRCS))

all: $(OBJS)

$(OBJ_PATH)/%.o: %.c
$(CC) $(FLAGS) $< -o $@

关于c - Makefile 不允许增量构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25922269/

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