如何在makefile中设置长选项

时间:2015-04-17 10:23:53

标签: makefile

我正在编写一个makefile,供学生分发。为了减轻他们的黑客攻击经验,我想提醒一些未经初始化的变量。

我知道有一个选项--warn-undefined-variables可以做到这一点,当然,我可以在我的.bashrc中添加一个别名álaalias make =“make --warn-undefined-variables”。但是我想在makefile中设置这个选项,这样学生们在开始扩展makefile时也会自动从这些警告中获益。 这样做的逻辑方法是MAKEFLAGS变量。然而,虽然它适用于短期选项,但我无法使用 - {3}}

中描述的--warn-undefined-variables

生成文件:

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设置正确。有什么建议吗?

1 个答案:

答案 0 :(得分:2)

我在这里有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'

要么我在某事上蠢蠢欲动......要么就是制造中的错误。我倾向于考虑后者。