我看到由于自动生成的文件(automake)而偶尔出现的构建失败。如何在自动生成的文件之间创建依赖关系?

问题描述 投票:0回答:1

我一直在尝试调试makefile.am,这有时会导致make的构建失败。在此文件中,源是自动生成的.c文件,而标头是自动生成的.h文件。

..._SOURCES = @buildDirectory@/x.c
              @buildDirectory@/y.c
              @buildDirectory@/z.c

..._HEADERS = @buildDirectory@/x.h
              @buildDirectory@/y.h
              @buildDirectory@/z.h

失败看起来像这样

<failedproto>.proto: "symbol1" is not defined.
<failedproto>.proto: "symbol2" is not defined.
<failedproto>.proto: "symbol3" is not defined.
...
<failedproto>.proto: warning: Import <failedproto>.proto but not used.
make: *** [<failedproto>.c] Error 1
make: *** Waiting for unfinished jobs....

所有这些符号都出现在相应的.h中。这使我认为.c是在.h之前生成的,它只是一个直线比赛。我已将..._ SOURCES和_HEADERS都添加到BUILT_SOURCES,但仍然看到失败。因此,我的下一个直觉是在.h上为.c创建依赖项。由于它们都是自动生成的,我该怎么办?同样,任何替代解决方案也将受到欢迎。

希望我的格式不会引起混淆。

makefile dependencies autotools automake
1个回答
0
投票

这样在整个makefile中使用@...@替换是非常不寻常的。通常,您将替换一次分配给一个make变量,然后使用该变量(除了“更易读”之外,如果有人愿意,它可以使某人在make命令行上覆盖此值):] >

BUILDDIR = @buildDirectory@

..._SOURCES = $(BUILDDIR)/x.c
          $(BUILDDIR)/y.c
          $(BUILDDIR)/z.c

..._HEADERS = $(BUILDDIR)/x.h
          $(BUILDDIR)/y.h
          $(BUILDDIR)/z.h

而且,在我看来,似乎有标准的automake变量可能已经覆盖了该值;如果是这样,那么使用标准的方法要比发明新的方法要好。。。但是显然,如果不了解您的环境,就无法知道这一点。

无论如何,对于您的问题,我们需要了解更多有关此自动生成操作的信息。您现在的自动生成规则是什么样的?确实是在生成.h文件之前无法完成.c文件生成的情况吗?这很不正常。

如果列出输出文件,输入文件和所需的命令,那么编写正确的规则非常简单。

© www.soinside.com 2019 - 2024. All rights reserved.