2014-06-27 111 views
1

是否有任何本机makefile(GNU make等)方式来获取目标先决条件的先决条件?这些问题是不是关于通过编译器从源文件进行依赖性检查(例如,g ++ -MM)。Makefile:获取目标先决条件的先决条件

在主题上找不到任何东西。正如我所看到的,这种情况没有特别的变数。

为了说明问题,下面是我从C++源代码编译配方的定义,对象,非常标准虽然:

##### UNIVERSAL COMPILE ##### 
%.o: %.cpp %.hpp 
    ${CC} ${CFLAGS} -c $< -o [email protected] 

然后我需要建立的依赖非常大的连锁店:

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 [email protected] 

正如你ç一看,配方需要所有供应依赖的,但需要得到所有供应依赖的依赖关系。

没有与总体规划的连接没有问题,因为它是食谱:

##### PROGRAM LINK ###### 
${BIN}: ${OBJ} 
    ${LN} ${LNFLAGS} ${OBJ} -o ${BINDIR}/[email protected] 

但我需要做单元测试,和单位取决于一个每个人的依赖性和测试的层次结构子系统是非常累人写作硬编码的依赖链。

也许我这样做的方式不对?也许有这个链接配方的替代品?谢谢!

+0

你是什么意思“...的目标先决条件”?我得到了“目标的先决条件”的意思,但不是“获取目标先决条件的先决条件”。 – Adrian

回答

1

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

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

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

就是这样。

+0

对不起,我写的不是这个意思,改变了问题,特别是反映链接配方的依赖链。 – Anthony

+0

我想他可能会问的是我现在希望做的事情可以做一点,那就是支持在目标体中获得先决条件的先决条件的一种方式(其他一些自动化变量或其他)。我需要这个来创建“源”文件的tarball,并偶尔一起构建/消除结果文件。 –

+0

@EtanReisner但他没有列出'b.o:b.o a.o';他说'b:b.o a.o'。那是不同的,对吧? – Adrian