簡體   English   中英

Makefile編譯沒有依賴項的好的文件

[英]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期望它們所在的./中。

兩種替代解決方案:

  1. DEP := $(OBJS:%.o=%.d)
  2. @$(CXX) -c $(CFLAGS) -MT $@ -MMD -MP -MF $(<:%.cc=%.d) -o $@ $<

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM