[英]Makefile recompiles everything
我知道這個問題已經多次提出,但無論如何我似乎都找不到我的問題。
對象和依賴文件在它們自己的文件夾中創建。 但似乎在重新編譯時未使用它們。 我做錯了什么?
我已經按照http://make.mad-scientist.net/papers/advanced-auto-dependency-generation/#combine生成了依賴文件。
APP = test
OBJDIR = obj
DEPDIR = dep
HDRS = -Ibuild/src_generated -Isrc -Isrc/client -Isrc/server -Ideps -Iinclude -Iplugins
SRCS = $(wildcard build/src_generated/*.c) \
$(wildcard src/*.c) \
$(wildcard src/client/*.c) \
$(wildcard src/server/*.c) \
$(wildcard deps/*.c) \
plugins/ua_accesscontrol_default.c \
plugins/ua_clock.c \
plugins/ua_config_default.c \
plugins/ua_debug_dump_pkgs.c \
plugins/ua_log_stdout.c \
plugins/ua_network_tcp.c \
plugins/ua_nodestore_default.c \
plugins/ua_pki_certificate.c \
plugins/ua_securitypolicy_none.c \
tutorial_server_datasource.c
SRCDIRS = ./build/src_generated ./src ./src/client ./src/server ./deps ./plugins
OBJS = $(patsubst %.c,$(OBJDIR)/%.o,$(SRCS))
POSTCOMPILE = @mv -f $(DEPDIR)/$*.Td $(DEPDIR)/$*.d && touch $@
CFLAGS = -Os -std=c99 -DUA_NO_AMALGAMATION
DEPFLAGS = -MT $@ -MMD -MP -MF $(DEPDIR)/$*.Td
$(APP): buildrepo $(OBJS)
$(CC) $(OBJS) -o $@ $(CFLAGS) $(HDRS) -s
$(OBJDIR)/%.o: %.c $(DEPDIR)/%.d
$(CC) $(DEPFLAGS) $(CFLAGS) $(HDRS) -o $@ -c $<
$(POSTCOMPILE)
$(DEPDIR)/%.d: ;
.PRECIOUS: $(DEPDIR)/%.d
include $(wildcard $(patsubst %,$(DEPDIR)/%.d,$(basename $(SRCS))))
.PHONY: clean
clean:
rm -rf $(OBJDIR)/*
rm -rf $(DEPDIR)/*
rm -rf $(APP)
buildrepo:
@$(call make-repo)
define make-repo
for dir in $(SRCDIRS); \
do \
mkdir -p $(OBJDIR)/$$dir; \
mkdir -p $(DEPDIR)/$$dir; \
done
endef
這行:
include $(wildcard $(patsubst %,$(DEPDIR)/%.d,$(basename $(SRCS))))
期望所有依賴項文件都在一個文件夾中。 您可能想要:
-include ${SRCS:%.c=$(OBJDIR)/%.d} # Note the leading -
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.