Makefile:获取目标先决条件的先决条件
Posted
技术标签:
【中文标题】Makefile:获取目标先决条件的先决条件【英文标题】:Makefile: get prerequisites of target prerequisites 【发布时间】:2014-06-27 10:00:02 【问题描述】:是否有任何本地 makefile(GNU make 等)方法来获取目标先决条件的先决条件?这些问题不是关于编译器(例如 g++ -MM)对源文件的依赖性检查。
找不到有关主题的任何内容。正如我所看到的,这种情况没有特殊的变量。
为了说明问题,这是我对从 C++ 源代码到对象的编译配方的定义,虽然很标准:
##### UNIVERSAL COMPILE #####
%.o: %.cpp %.hpp
$CC $CFLAGS -c $< -o $@
然后我需要构建非常大的依赖链:
a: a.o
b: b.o a.o
c: c.o b.o a.o
d: d.o c.o b.o a.o
etc, up to N times...
这是必要的,因为这个链接配方:
##### UNIVERSAL LINK #####
%: %.o
$LN $LNFLAGS $^ -o $@
如您所见,recipe 需要所有提供的依赖项,但需要获取所有提供的依赖项的所有依赖项。
整个程序链接没有问题,就像在配方中一样:
##### PROGRAM LINK ######
$BIN: $OBJ
$LN $LNFLAGS $OBJ -o $BINDIR/$@
但是我需要进行单元测试,并且单元相互依赖,并且子系统的测试层次结构写成硬编码的依赖链非常累人。
也许我做错了?也许这个链接配方有替代品?谢谢!
【问题讨论】:
你是什么意思“...的目标先决条件”?我明白“目标的先决条件”是什么意思,但不是“获得目标先决条件的先决条件”。 【参考方案1】:你做错了。为什么您要声明每次a.o
更改时都必须重新编译b.o
(这是您指定先决条件pf b.o : a.o
时的含义之一)?这不是需要发生的事情,而且没有意义。
您需要列出所有个目标文件作为单个可执行文件的先决条件,例如:
exe: a.o b.o c.o d.o ...
就是这样。
【讨论】:
对不起,我写的不是那个意思,改变了问题,特别是反映链接配方的依赖链。 我认为他可能要问的是我希望 make 现在可以做的事情,即支持一种获取身体先决条件的先决条件的方法目标(其他一些自动变量或其他)。我有时需要它来创建“源”文件的压缩包并一起构建/修改结果文件。 @EtanReisner 但他没有列出b.o: b.o a.o
;他说b: b.o a.o
。那不一样了,对吧?以上是关于Makefile:获取目标先决条件的先决条件的主要内容,如果未能解决你的问题,请参考以下文章