我看过,发现了一些看起来与这个问题相关的答案,但似乎没有任何帮助。
这是通常的故事 - 我有一个包含 .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