在makefile中使用y / n设置环境变量

时间:2018-04-20 08:00:24

标签: makefile

我试图在makefile中实现一个问题。那么我怎样才能询问用户是否要在打开/关闭LED的情况下构建二进制文件。

当用户启动" make"在shell中应该有一个类似&#34的问题;你想用LED实现你的Binary吗? Y / N"

如果有" n"我的预处理器应该忽略我的c程序中的所有LED实现。 c中的部分我已经做过了。但我是makefile的新手。

我可以通过makefile设置env.variable吗?我怎么能这样做?

2 个答案:

答案 0 :(得分:3)

单独的目标怎么样,所以你可以让用户说出来

$ make with-led

$ make no-led

然后你的目标可以轻松使用适当的预处理器标志。

答案 1 :(得分:1)

我不会声称这是个好主意。但有可能:

# For GNU Make

ifndef LEDS
LEDS := $(shell bash -c 'read -p "Use LEDS? [y/n] " && echo $$REPLY')
endif

print:
    @echo LEDS=$(LEDS)

我真的建议您重新思考这是否是您想要的。关于Make的原则是它不是交互式的,你构建的用户可能不会因为你的违反而感谢你。例如,在构建服务器上自动编译,或者仅在Emacs compile缓冲区中自动编译。

更好的策略是在Make变量中默认一种方式 - 在调用Make时可以覆盖它:

make install LED=0

你可能会坚持指定一个值:

# GNU Make, again

ifndef LEDS
$(error LEDS must be specified for this build)
endif