首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用VPATH和include的Makefile技巧

使用VPATH和include的Makefile技巧
EN

Stack Overflow用户
提问于 2010-03-16 18:51:56
回答 1查看 8.5K关注 0票数 2

我正在尝试使用make文件和VPATH变量。基本上,我从几个不同的地方抓取源文件(由VPATH指定),并使用我想要的.o文件列表将它们编译到当前目录中。

到目前为止一切顺利,现在我正在将依赖项信息生成到一个名为'.depend‘的文件中,并将其包含在内。如果包含文件不存在,Gnumake将尝试使用到目前为止定义的规则来创建包含文件,所以这是可以的。基本上,我的makefile是这样的。

代码语言:javascript
复制
VPATH=A/source:B/source:C/source

objects=first.o second.o third.o

executable: $(objects)

.depend: $(objects:.o=.c)
    $(CC) -MM $^ > $@

include .depend

现在是真正的问题了,我能以任何方式抑制.depend文件的生成吗?我目前在一个clearcase环境->中工作,所以当我更新依赖信息时,我更愿意让它处于更好的控制之下。

这或多或少是一个学术练习,因为我可以在执行make之前将它封装在一个接触.depend文件的脚本中(从而使它比任何源文件都要新),但如果我能以某种方式使用‘纯’make来抑制它,这将是一件有趣的事情。

我不能删除对源文件的依赖(例如,简单地使用.depend:),因为我依赖于$^变量来为我执行VPATH解析。

如果有任何方法可以只更新依赖项作为更新的#include指令的结果,那当然会更好。但我不会屏息等待的.:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-03-16 20:27:53

如果你不想每次都重写.depend,你就不能有一个规则。请注意,当您确实需要重新生成依赖文件时,还必须重新生成一个目标文件(这不是我的见解,它来自Advanced Auto-Dependency Generation,我花了一些时间才掌握它)。因此,使用伪目标在链接规则中构造.depend:

代码语言:javascript
复制
DEPEND_FILE = .depend
# put this command in the executable rule
    $(MAKE) DEPENDENCIES

.PHONY: DEPENDENCIES
DEPENDENCIES: $(objects:.o=.c)
    $(CC) -MM $^ > $(DEPEND_FILE)

-include $(DEPEND_FILE)

您可以通过分离依赖文件来提高效率,每个对象对应一个依赖文件,这样当其中一个文件发生更改时,您不必重新计算所有对象的依赖关系:

代码语言:javascript
复制
# put this command in the %.o rule
    $(CC) -MM $< > $*.d

-include *.d

(编辑:刚刚更正了一个愚蠢的错误。)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2453689

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档