如何在makefile中设置长选项
问题描述:
我正在写一个makefile以供学生分发。为了缓解他们的黑客体验,我想对未初始化的变量进行警告。如何在makefile中设置长选项
我知道有这个选项--warn-undefined-variables可以做到这一点,当然,我可以添加一个别名别名make =“make --warn-undefined-variables”给我的.bashrc 。但是我想在makefile中设置这个选项,这样当学生开始扩展makefile时,他们也会自动从这些警告中获益。 这样做的逻辑方法是MAKEFLAGS变量。然而,尽管它适用于短选项,我不能在Can make warn me, when I use unset variables?
的Makefile描述它与--warn-不确定变量工作:
MAKEFLAGS=--warn-undefined-variables
$(info MAKEFLAGS: $(MAKEFLAGS))
$(info ${BAR})
电话:
$ make
MAKEFLAGS: --warn-undefined-variables
make: *** No targets. Stop.
$ make --warn-undefined-variables
MAKEFLAGS: --warn-undefined-variables
Makefile:3: warning: undefined variable 'BAR'
make: *** No targets. Stop.
当我将MAKEFLAGS更改为-d控制台充斥着调试信息,所以我知道MAKEFLAGS设置正确。有什么建议么?
答
我有GNU make 4.0在这里,我不能为我的生活得到使用一个简单的Makefile兑现MAKEFLAGS= --warn-undefined-variables
。但是,如果我使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'
要么我borking的东西...或者是一个错误的化妆。我倾向于认为后者。
你将会淹没像'TARGET_ARCH'和'LOADLIBES'这样的未设置变量的虚假警告。 – Wintermute
这取决于他是否使用内置规则来处理任何事情,我认为。 –