如何在没有生成源的情况下在automake中设置对源文件的任意依赖性

时间:2012-03-13 05:35:23

标签: makefile automake

我对包含生成文件的源文件的depdency排序有问题。例如,在名为unit.cpp的文件中,我有:

 #include "generated.hpp"

其中generated.hpp是生成的文件,将在输出包含目录中生成。现在,该文件是通过中间命令生成的,其中包含makefile规则,例如:

 .build-generated:
     cmd.sh ... > include/generated.hpp
     touch $@

因此,构建unit.o文件需要先调用.build-generated。如果我执行以下操作,则会混淆生成的makefile:

 unit.cpp: .build-generated

由于make现在假定unit.cpp是生成的文件而忽略源目录中的文件(仅当必须重新生成.build生成的文件时)。我查看了详细的make输出,它说它忽略了VPATH中的那个。

在普通的makefile中,我可能会使unit.o依赖于其他目标,但这似乎不是automake方式(因为它可能不是可移植的)。 它实际上甚至不起作用,因为目标可能是.lo文件而不是

如何正确告诉automake这种依赖?

3 个答案:

答案 0 :(得分:1)

根据automake手册,您需要按照

指定它
BUILT_SOURCES = generated.hpp

答案 1 :(得分:0)

如果您对automake使用autoconf,则可以从标题中依赖源文件:

$srcdir/unit.cpp : $builddir/include/generated.hpp

如果$builddir不适合您(例如,您可以使用几个Makefile.am中包含的公共标头),请使用$top_builddir。其他有用的autoconf变量可以找到here

答案 2 :(得分:0)

我认为正确的解决方案是让目标文件依赖于生成的标头:

include/generated.hpp:
     cmd.sh ... > include/generated.hpp
     touch $@
unit.o: include/generated.hpp

如果使用automake,比如

$(prog_OBJECTS): include/generated.hpp