如何将选项-f SomeMakefile传递给子make? [这里有GNUMake]

时间:2015-09-07 08:42:46

标签: makefile

当通过配方中的某些$(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不会使用它。

1 个答案:

答案 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})