【问题标题】:Dollars in Makefile environment variablesMakefile 环境变量中的美元
【发布时间】:2016-12-10 16:44:57
【问题描述】:

是否可以在我的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 对其进行修改。

【问题讨论】:

    标签: bash shell makefile environment-variables


    【解决方案1】:

    添加$$ 双美元并双引号。

    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。

    【讨论】:

    • 是否可以在没有export 的情况下在命令行上传递它(即在make 之后但仍然没有双美元?我认为它不是,因为它相当于有定义在Makefile 本身中。
    猜你喜欢
    • 2017-03-17
    • 2014-07-21
    • 1970-01-01
    • 2015-02-01
    • 2021-05-01
    • 2016-04-28
    • 2013-10-28
    • 2015-03-27
    • 1970-01-01
    相关资源
    最近更新 更多