首页 文章

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

提问于
浏览
1

是否有任何本机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 回答

  • 1

    你是以错误的方式做到的 . 你为什么要声明每次 a.o 更改时都必须重新编译 b.o (当你指定一个先决条件pf b.o : a.o 时,这是(一个)它意味着什么?)那个's not what needs to happen and it doesn't是有道理的 .

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

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

    而已 .

相关问题