gpt4 book ai didi

automake - 在 automake 中为目标添加依赖项

转载 作者:行者123 更新时间:2023-12-01 11:29:48 27 4
gpt4 key购买 nike

我遇到了一个 automake 的问题,我似乎找不到一个干净的解决方案,这似乎应该是可能的(甚至是简单的),但没有简单的工作。

基本上,我遇到的问题是源文件包含自动生成的头文件。我可以添加依赖项来生成头文件只是文件,一旦头文件存在,一切正常,因为 automake 的自动依赖项生成会处理所有事情。问题是第一次您在干净的树中运行 make 时,依赖文件不存在,因此 automake 不知道生成头文件,这使得编译文件包括header 在不生成任何依赖项的情况下失败。这是先有鸡还是先有蛋的问题——您需要手动告诉(自动)make 构建头文件。

显而易见的解决方案只是为 header 添加对 Makefile.am 文件的依赖项,但这不起作用,因为对目标的依赖项会覆盖 automake 的自动规则生成,如文档所述:

Note that Automake does not make any distinction between rules with commands and rules that only specify dependencies. So it is not possible to append new dependencies to an automake-defined target without redefining the entire rule.

现在我已经通过“隐藏”对 automake 的依赖来绕过这个问题,但这只适用于 GNU-make:

生成文件.am:

bin_PROGRAMS = foo
foo_SOURCES = main.c foobar.c baz.c

gen.h: system.spec
...command to regen gen.h

# foobar.c #includes gen.h, so it needs to exist prior to compiling foobar.c
$(eval foo-foobar.o: gen.h)

这样可以解决问题,但看起来很难看。是否有更好的自动制造安全方法来执行此操作?

最佳答案

Automake 提供BUILT_SOURCES 来解决这个问题。添加到这里的文件是在普通编译完成之前构建的——它专门用于生成的头文件和源代码。

在您的情况下,这就足够了:

BUILT_SOURCES = gen.h

关于automake - 在 automake 中为目标添加依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33425288/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com