是否可以在Makefile
中为某个部分“禁用”变量展开?
以下是我遇到的问题的一个例子:
print_command:
@echo '$(COMMAND)'
这是我得到的输出:
$ export COMMAND='My favourite shell is $SHELL'
$ make print_command
My favourite shell is HELL
$ make print_command COMMAND='Welcome to $SHELL'
Welcome to HELL
我想得到什么:
$ export COMMAND='My favourite shell is $SHELL'
$ make print_command
My favourite shell is $SHELL
$ make print_command COMMAND='Welcome to $SHELL'
Welcome to $SHELL
是否可以在不使用双倍美元的情况下执行此操作:
$ export COMMAND='My favourite shell is $$SHELL'
$ make print_command
My favourite shell is $SHELL
$ make print_command COMMAND='Welcome to $$SHELL'
Welcome to $SHELL
以最简单的形式,我希望转发变量COMMAND
的确切内容而不用make
修改它。
答案 0 :(得分:5)
添加$$
双倍美元并双引号。
print_command:
@echo "$$COMMAND"
像,
$ export COMMAND='My favourite shell is $SHELL'; make print_command
My favourite shell is $SHELL
从GNU
制作页面查看此How to Use Variables
页面。
如果您只是添加单引号,make
会打印出变量: -
例如与
print_command:
@echo '$$COMMAND'
$ export COMMAND='My favourite shell is $SHELL'; make print_command
$COMMAND
因为$
在Makefile中具有特殊含义,需要进行转义。如果您需要make
扩展定义的变量的值,请使用value
语法
print_command:
@echo $(value COMMAND)
$ export COMMAND='My favourite shell is $SHELL'; make print_command
My favourite shell is /bin/bash
在上述情况下,环境变量的值被扩展为/bin/bash
。