gpt4 book ai didi

makefile - 修改CFLAGS时生成文件did't rebuild the obj's?

转载 作者:行者123 更新时间:2023-12-02 01:58:37 25 4
gpt4 key购买 nike

众所周知,二进制文件取决于obj,而obj取决于.c文件(假定为C项目)。假设我有一个env.mk文件。该文件具有“export NO_DISPLAY = YES”之类的标志。在主Makefile中,我有以下内容。

ifeq ($(NO_DISPLAY),YES)
CFLAGS += -D__DISPLAY_DISABLE
endif

显然,env.mk包含在主make文件中。每当我更改标志值“NO_DISPLAY”。生成文件不会再重建可执行文件。但是,删除.o文件时,同样可以正常工作。我了解其背后的原因取决于.c,.h文件。 .c .h文件未修改,因此makefile忽略以重建它。但是,如果CFLAGS值更改,我希望makefile重建代码。我该怎么做?请注意,我不想删除objs并重建它。
target_dbg: $(patsubst ./src/%.c,./obj_dbg/%.o,$(wildcard ./src/*.c)) 
@echo "Target main rule__dbg $(NPROCS)"
$(CC) $(patsubst ./src/%.c,./obj_dbg/%.o,$(wildcard ./src/*.c)) $(LIBS) -o gif_dbg

./obj_dbg/%.o: ./src/%.c ./include/*.h
@echo "I am called first..dbg"
@mkdir -p ./obj_dbg
#$(CC) $(CFLAGS) -E $<
$(CC) $(CFLAGS) $(LDFLAGS) -DDEBUG -c $< -o $@

任何帮助将不胜感激。

最佳答案

通过检查文件上的时间戳,Make可以简单地工作。您几乎不希望每个构建工件都依赖Makefile(至少在积极开发它时不),但是如果您认真地希望Make处理这种依赖关系,则可以将CFLAGS定义放在辅助文件buildflags.mk中,包括在主Makefile中,并使所有目标文件都依赖buildflags.mk

不过,我几乎认为没有人会实际这样做。在所有情况下,确保获得完整构建的唯一方法是冲洗所有内容并重新开始。确保您拥有良好且最新的realclean和/或distclean目标,并确保在对构建基础结构进行根本性更改时记得使用它们。每晚进行一次构建工作(或类似工作),从完全干净的状态开始进行构建-例如通过将新副本 check out 到临时目录中-显然也是一个好主意。

另外,在每个目标文件中都将构建标志的副本作为静态字符串包括在内,以便稍后可以使用--help选项或类似方法对其进行验证。

关于makefile - 修改CFLAGS时生成文件did't rebuild the obj's?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18547777/

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