如何解决使用GCC依赖文件使Make每次都完全重建项目
|| 我已经按照在线说明设置了gcc(实际上是g ++)来生成依赖项的.d文件,现在我的makefile看起来像这样:CPPFLAGS := ... -MMD -MP
...
OBJECTS := $(shell find *.cpp *.s | sed -e \'s/\\.cpp/\\.o/\' -e \'s/\\.s/\\.o/\')
all: setupdir $(OBJECTS) link image
然后在文件末尾:
-include $(pathsubst %.d,obj/%.d,$(OBJECTS:.o=.d))
.d文件正在正确生成,并且全部显示在obj目录中。现在的问题是,即使没有为它们生成.d文件的程序集文件,每次我运行make时,整个源代码树也会被重建。该项目不需要很长时间就能编译,但是仍然可以如何修复它,以使make正确运行?
解决方法
重要的是要注意,ѭ2不是依赖项的灵丹妙药,在许多情况下,您需要指定某些标头,以便在它们更改时可以适当地重新构建它们。实际上,让gcc处理依赖项最常见的问题是应该重建的东西(应该广泛地取决于运行
make
的人使用的GCC版本)。
话虽如此,我看不到您所做的任何公然错误。
我建议您做的是消除shell技巧,因为准确指定所需的内容非常容易。例如。
foo_SOURCES = \\
src/foo.cpp \\
src/bar.cpp
foo_OBJECTS = $(foo_SOURCES:.cpp=.o)
foo_DEPS = $(foo_OBJECTS:.o=.d)
%.o : %.cpp
$(CC) $(CFLAGS) ... $< -o $@
$(CC) -M $< > $(@.o=.d)
# lots more rules and targets here
# and finally,at the bottom:
-include $(foo_DEPS)
这是meta形式,不在我的头上,因此请确保对其进行检查。我相信您的问题实际上是不包括依赖项,但我看不出您使用ѭ5way的方式有任何明显错误。
正如人们在评论中指出的那样,在调试时运行make可能会有所帮助,但是一个好的第一步将是在不与shell对话的情况下指定您的对象和依赖项。
如果您能正常工作,请尝试仅存储shell调用的结果并将它们回显到屏幕上。这比make的调试输出要少很多。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。