[英]Makefile compiling the good files without the dependencies
我的Makefile中的依賴項有問題。 編譯沒有問題,它可以完美地編譯好* .cc和* .hh,但不幸的是,它不會重新編譯依賴項,因此可執行文件中沒有更新。
這是我的makefile:
EXEC ?= program
SRCS = $(shell find -name *.cc)
DEP = $(SRCS:.cc=.d)
OBJDIR = objs
OBJS = $(SRCS:./%.cc=$(OBJDIR)/%.o)
CXX = g++
CFLAGS = -std=c++14 $(addprefix "-I", $(shell find -type d))
## Clean rule
.PHONY: clean
clean:
rm -rf $(OBJDIR)
rm -f $(EXEC)
$(EXEC) : $(OBJS)
@echo "Linking: $@"
$(CXX) $(OBJS) -o $@
-include $(DEP)
$(OBJDIR)/%.o : ./%.cc ./%.hh
@mkdir -p $(@D)
@echo "Compiling: $<"
@$(CXX) -c $(CFLAGS) -MT $@ -MMD -MP -o $@ $<
它可能與g++
使用的標志有關,但是我無法找到解決方案; 在此先感謝您可以提供的有關此問題的幫助,
如果您沒有為生成的依賴文件指定文件名,它將為${@:%.o=%.d}
(編譯器邏輯)。 也就是說,您的依賴文件位於$(OBJDIR)
,而不位於您的makefile期望它們所在的./
中。
兩種替代解決方案:
DEP := $(OBJS:%.o=%.d)
。 @$(CXX) -c $(CFLAGS) -MT $@ -MMD -MP -MF $(<:%.cc=%.d) -o $@ $<
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.