我遇到了一个与automake有关的问题,我似乎无法找到一个干净的解决方案,看起来它应该是可能的(甚至简单),但没有什么简单的工作.
基本上我遇到的问题是源文件包含自动生成的头文件.我可以添加依赖项来生成头文件只是文件,一旦标题存在,一切正常,因为automake的自动依赖生成处理所有事情.问题是第一次在干净的树中运行make时,依赖文件不存在,因此automake不知道生成头文件,这使得包含头的文件的编译失败而不产生任何依赖.这是一个鸡蛋问题 - 你需要手动告诉(自动)make来构建头文件.
显而易见的解决方案是在头文件的Makefile.am文件中添加依赖项,但这不起作用,因为对目标的依赖关系会覆盖automake的自动规则生成,正如文档所说:
请注意,Automake不会区分具有命令的规则和仅指定依赖关系的规则.因此,如果不重新定义整个规则,则无法将新的依赖项附加到automake定义的目标.
现在我通过"隐藏"来自automake的依赖来解决这个问题,但这仅适用于GNU-make:
Makefile.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)
Run Code Online (Sandbox Code Playgroud)
这样做,但看起来很难看.是否有更好的自动安全方式来做到这一点?
Automake耗材BUILT_SOURCES
解决了这个问题.添加到此的文件是在完成普通编译之前构建的 - 它专门用于生成的标头和源.
在你的情况下,这应该足够:
BUILT_SOURCES = gen.h
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
834 次 |
最近记录: |