Makefile:获取目标先决条件的先决条件

时间:2014-06-27 10:00:03

标签: makefile gnu-make

是否有任何本机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 $@

如您所见,配方需要 所有提供的依赖项 ,但需要 所有提供的依赖项的所有依赖项 < /强>

整个程序链接没有问题,因为它在配方中:

##### PROGRAM LINK ######
${BIN}: ${OBJ}
   ${LN} ${LNFLAGS} ${OBJ} -o ${BINDIR}/$@

但是我需要进行单元测试,并且单元依赖于彼此依赖性和子系统测试的层次结构是非常累人的,可以编写为硬编码的依赖链。

也许我以错误的方式做这件事?也许有这个链接食谱的替代品?谢谢!

1 个答案:

答案 0 :(得分:1)

你以错误的方式做这件事。为什么要声明每次b.o更改时都必须重新编译a.o(当您指定先决条件pf b.o : a.o时,这意味着什么?)?这不是需要发生的事情,它没有意义。

您需要将所有目标文件列为单个可执行文件的先决条件,例如:

exe: a.o b.o c.o d.o ...

那就是它。