gpt4 book ai didi

c++ - Make with Autodependencies for C++

转载 作者:行者123 更新时间:2023-11-28 07:43:45 24 4
gpt4 key购买 nike

我看了看,发现了一些看起来与这个问题相关的答案,但似乎没有一个有帮助。

这是常见的故事 - 我有一个包含 .hpp 和 .cpp 文件的文件夹,我想将它们编译为 .o 文件,然后只有在它们所依赖的文件发生更改时才重新编译文件。

我当前的 makefile 是:

SRCS = $(shell find ../Includes/ -name "*.cpp")
DEPS = $(SRCS:.cpp=.d)
OBJS = $(SRCS:.cpp=.o)

all: $(DEPS) $(OBJS)

# Create the dependency files
%.d : %.cpp
clang++ -MM $< -o $@ -c -std=c++11

# Include the dependency files
include $(DEPS)

# Compile the source files
%.o : %.cpp
clang++ -c -Wall -std=c++11 $< -o $@

我已经运行了几次(因此依赖文件在我运行 make 之前就已经存在,并且在我包含它们时肯定会存在)。我还尝试将 %.d 添加到 %.o 的依赖项中。

基本上目前发生的所有事情都是“触摸”.cpp 导致重新生成 .o 和 .d 文件,并触摸 .hpp 文件(在其他文件的 .d 文件中列出)什么都不做。

示例依赖文件:

SomeFile.o : ../Includes/SomeFile.cpp \
../Includes/SomeFile.hpp ../Includes/SomeOtherFile.hpp

最佳答案

除了路径问题,我发现沿途创建依赖关系更自然,即使用 -MD-MMD 标志。这样您就不需要规则来更新依赖文件。

CPPFLAGS += -MMD

TARGET := hello

.DEFAULT: all
all: $(TARGET)

SRCS := $(shell find . -type f -name "*.cpp")
OBJS := $(SRCS:.cpp=.o)
DEPS := $(SRCS:.cpp=.d)

hello: $(OBJS)
$(LINK.cc) -o $@ $^

-include $(DEPS)

关于c++ - Make with Autodependencies for C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15294147/

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