是否有任何本机makefile(GNU make等)方式来获得目标先决条件的先决条件?这些问题是 not 关于编译器对源文件的依赖性检查(例如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 $@
如您所见,配方需要 all of supplied dependencies ,但需要获取 all dependencies of all supplied dependencies .
整个程序链接没有问题,因为它在配方中:
##### PROGRAM LINK ######
${BIN}: ${OBJ}
${LN} ${LNFLAGS} ${OBJ} -o ${BINDIR}/$@
但是我需要进行单元测试,并且单元依赖于彼此依赖性和子系统测试的层次结构非常令人厌烦,因为它们是硬编码的依赖链 .
也许我是以错误的方式做到的?也许有这个链接食谱的替代品?谢谢!
1 回答
你是以错误的方式做到的 . 你为什么要声明每次
a.o
更改时都必须重新编译b.o
(当你指定一个先决条件pfb.o : a.o
时,这是(一个)它意味着什么?)那个's not what needs to happen and it doesn't是有道理的 .您需要列出所有目标文件作为单个可执行文件的先决条件,例如:
而已 .