如何在makefile中设置长选项

如何在makefile中设置长选项,makefile,Makefile,我正在写一个makefile分发给学生。为了缓解他们的黑客体验,我想提醒一下未初始化的变量 我知道有一个选项--warn undefined variables可以做到这一点,当然,我可以将aliasála alias make=“make--warn undefined variables”添加到my.bashrc中。但是我想在makefile中设置这个选项,这样学生在开始扩展makefile时也会自动从这些警告中获益。 这样做的逻辑方法是MAKEFLAGS变量。但是,尽管它适用于短选项,但我

我正在写一个makefile分发给学生。为了缓解他们的黑客体验,我想提醒一下未初始化的变量

我知道有一个选项--warn undefined variables可以做到这一点,当然,我可以将aliasála alias make=“make--warn undefined variables”添加到my.bashrc中。但是我想在makefile中设置这个选项,这样学生在开始扩展makefile时也会自动从这些警告中获益。 这样做的逻辑方法是MAKEFLAGS变量。但是,尽管它适用于短选项,但我无法让它使用中所述的--warn未定义变量

生成文件:

MAKEFLAGS=--warn-undefined-variables
$(info MAKEFLAGS: $(MAKEFLAGS))
$(info ${BAR})
电话:


当我将MAKEFLAGS更改为-d时,控制台中充斥着调试信息,因此我知道MAKEFLAGS设置正确。有什么建议吗?

我这里有GNU make 4.0,我一辈子都不能用一个简单的make文件警告未定义的变量。但是,如果我让Makefile调用自己,那么
MAKEFLAGS=--warn undefined variables
在子调用中工作

MAKEFLAGS= --warn-undefined-variables
$(info MAKEFLAGS: $(MAKEFLAGS))
$(info $(BAR))

# This prevents a warning if we invoke make without a target...
MAKECMDGOALS?=

all:
ifndef RECURSED
    $(MAKE) RECURSED=1 $(MAKECMDGOALS)
else
    echo $(FOO)
endif
如果我只运行
make
,我会得到:

MAKEFLAGS: --warn-undefined-variables

make RECURSED=1 
make[1]: Entering directory '/tmp/t1'
MAKEFLAGS: --warn-undefined-variables
Makefile:3: warning: undefined variable 'BAR'

Makefile:12: warning: undefined variable 'FOO'
echo 

make[1]: Leaving directory '/tmp/t1'

要么我是在做什么。。。或者有一个错误在制造。我倾向于后一种想法。

你将淹没在关于未设置变量的虚假警告中,如
TARGET\u ARCH
LOADLIBES
。我认为这取决于他是否使用内置规则。
MAKEFLAGS: --warn-undefined-variables

make RECURSED=1 
make[1]: Entering directory '/tmp/t1'
MAKEFLAGS: --warn-undefined-variables
Makefile:3: warning: undefined variable 'BAR'

Makefile:12: warning: undefined variable 'FOO'
echo 

make[1]: Leaving directory '/tmp/t1'