gpt4 book ai didi

c++ - Makefile 在没有依赖项的情况下编译好的文件

转载 作者:行者123 更新时间:2023-11-28 01:38:53 26 4
gpt4 key购买 nike

我的 Makefile 中的依赖项有问题。编译没有问题,它完美地编译了好的 *.cc 和 *.hh 但不幸的是,它没有重新编译依赖项,因此可执行文件中没有更新。

这是我的生成文件:

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}。 (编译器逻辑)。 IE。你的依赖文件在 $(OBJDIR)而不是 ./您的 makefile 期望它们所在的位置。

两种替代方案:

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

关于c++ - Makefile 在没有依赖项的情况下编译好的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48185374/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com