【发布时间】:2017-02-23 09:03:14
【问题描述】:
在我的程序中,我的构建过程有些复杂。目前,在一个目录中,我在Makefile.am 中使用include 和一个文件,该文件不存在但必须自行构建。原因是这个包含文件很长。进一步在实际程序中,它不仅仅是一个文件,而是多个文件,并且该文件的生成过程会不时改变。
Makefile.am 看起来像这样
noinst_LIBRARIES = libtest.a
nodist_libtest_a_SOURCES = file.c
CLEANFILES = file.c Make_file.mk
$(builddir)/Make_test.mk: $(srcdir)/Perl/generate_mk_files.pl
perl $(srcdir)/Perl/generate_mk_files.pl file
include $(builddir)/Make_file.mk
Make_file.mk 创建后看起来像
$(builddir)/file.c: $(srcdir)/file.template $(srcdir)/Perl/generate_c.pl
perl $(srcdir)/Perl/generate_c.pl $(srcdir)/file.template
Automake 和最终的构建过程同样有效。 make 的输出类似于(我将其缩短了一些):
Makefile:721: Make_file.mk: Datei oder Verzeichnis nicht gefunden (file not found)
perl ../../../../src/components/test/Perl/generate_mk_files.pl test
perl ../../../../src/components/test/Perl/generate_c.pl ../../../../src/components/test/file.template
因此,make首先抱怨找不到包含文件,然后创建它,然后也遵循包含文件的规则。
虽然我很高兴它有效,但我想知道为什么。首先,我认为make 加载了Makefile。在此步骤中,Make_file.mk 不存在。因此,Makefile 似乎被加载了不止一次。
此外,Automake 的 manual include 声明:
请注意,这些片段是由 automake 读取和解释的,而不是由 制作。
这不是我看到的,因为在 Automake 执行期间包含的片段不存在。
我的问题基本上是:
- 为什么有效?
- 这是正确的方法还是我应该使用其他方法,例如在
Makefile内启动make的新实例。
【问题讨论】: