首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >头部更改不会触发重新生成.o (使用.d依赖文件)

头部更改不会触发重新生成.o (使用.d依赖文件)
EN

Stack Overflow用户
提问于 2022-10-02 20:24:23
回答 1查看 61关注 0票数 0

我有一个如此简单的makefile:

代码语言:javascript
复制
#Compiler flags
CC := gcc
INCLDIR := -I./includes

#Directories and files
BUILDDIR := build
STLIB := $(BUILDDIR)/libbinary_tree.a

DEPS:=$(BUILDDIR)/binary_tree.d

-include $(DEPS)

$(BUILDDIR)/binary_tree.o: ./source_files/binary_tree.c
    mkdir -p $(@D)
    $(CC) -c $< $(INCLDIR) -o $@
    $(CC) -MM $(INCLDIR) ./source_files/binary_tree.c > $(BUILDDIR)/binary_tree.d

.PHONY: build clean

build: $(BUILDDIR)/binary_tree.o
    ar -rcs $(STLIB) $(BUILDDIR)/binary_tree.o

clean:
    rm -r $(BUILDDIR)

首先调用make build创建包含binary_tree.o: source_files/binary_tree.c includes/binary_tree.h./build/binary_tree.d文件,但是如果我更改标题includes/binary_tree.h,然后调用make build -它不重建build/binary_tree.o,只创建库/libbinary_tree.a。我不知道为什么makefile会忽略头文件中的更改。你能告诉我我的逻辑哪里错了吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-02 20:35:49

因为,binary_tree.obuild/binary_tree.o不是同一个文件。

所以你对前提关系的定义是:

代码语言:javascript
复制
binary_tree.o: source_files/binary_tree.c includes/binary_tree.h

指的是与编译规则的目标完全不同的文件:

代码语言:javascript
复制
$(BUILDDIR)/binary_tree.o: ./source_files/binary_tree.c
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73929096

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档