在我的程序中,我有一个有点复杂的构建过程。目前,在我使用的一个目录中include
in Makefile.am
对于一个文件,该文件不存在,但必须自行构建。原因是这个包含文件相当长。此外,在实际程序中,它不仅仅是一个文件,而是多个文件,并且该文件的生成过程可能会不时发生变化。
The 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
被加载多次。
此外,manual https://www.gnu.org/software/automake/manual/html_node/Include.html汽车制造商的include
states:
请注意,这些片段是由 automake 读取和解释的,而不是由
制作。
这不是我看到的,因为包含的片段在 Automake 执行期间不存在。
我的问题基本上是:
- 为什么它有效?
- 这是执行此操作的正确方法还是我应该使用其他方法,例如启动新实例
make
within Makefile
.