是否有任何本机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}/$@
但是我需要进行单元测试,并且单元依赖于彼此依赖性和子系统测试的层次结构是非常累人的,可以编写为硬编码的依赖链。
也许我以错误的方式做这件事?也许有这个链接食谱的替代品?谢谢!
答案 0 :(得分:1)
你以错误的方式做这件事。为什么要声明每次b.o
更改时都必须重新编译a.o
(当您指定先决条件pf b.o : a.o
时,这意味着什么?)?这不是需要发生的事情,它没有意义。
您需要将所有目标文件列为单个可执行文件的先决条件,例如:
exe: a.o b.o c.o d.o ...
那就是它。