当通过配方中的某些$(MAKE) foo
递归调用自身时,GNUMake
传递了一些调用它的选项,但不是全部。特别是它不传递-f SomeMakefile
选项。请参阅section 5.7.3 of manual。
如何找到make
是否使用某个-f
选项调用,如何将其传递给子制作?
为了使问题具体,这是SomeMakefile
包含的内容:
%.pdf : %.tex
pdflatex $(PDFLATEXFLAGS) $*
@if [ -f $*.log ] ; then $(MAKE) --silent $*.slw; fi
问题是如何在foo.slw
中定义SomeMakefile
,并且递归make
不会使用它。
答案 0 :(得分:3)
您可以从MAKEFILE_LIST
变量获取makefile的名称。 E.g:
${MAKE} -f $(lastword $(MAKEFILE_LIST))
如果您的makefile包含其他makefile,您可能希望将makefile的名称提前存储到一个立即分配的变量中,例如:
# Somewhere at the top of your makefile, before any includes
this_makefile := $(lastword ${MAKEFILE_LIST})
# and use it later
some_rule :
${MAKE} -f ${this_makefile}
或者,如果您知道您的makefile始终是第一个被make读取的文件,那么它将位于MAKEFILE_LIST
的前面,例如$(firstword ${MAKEFILE_LIST})
。