我有一个如此简单的makefile:
#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会忽略头文件中的更改。你能告诉我我的逻辑哪里错了吗?
发布于 2022-10-02 20:35:49
因为,binary_tree.o与build/binary_tree.o不是同一个文件。
所以你对前提关系的定义是:
binary_tree.o: source_files/binary_tree.c includes/binary_tree.h指的是与编译规则的目标完全不同的文件:
$(BUILDDIR)/binary_tree.o: ./source_files/binary_tree.chttps://stackoverflow.com/questions/73929096
复制相似问题