作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我看了看,发现了一些看起来与这个问题相关的答案,但似乎没有一个有帮助。
这是常见的故事 - 我有一个包含 .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/
我看了看,发现了一些看起来与这个问题相关的答案,但似乎没有一个有帮助。 这是常见的故事 - 我有一个包含 .hpp 和 .cpp 文件的文件夹,我想将它们编译为 .o 文件,然后只有在它们所依赖的文件
我是一名优秀的程序员,十分优秀!