gpt4 book ai didi

makefile - make 命令之前和之后的变量赋值

转载 作者:行者123 更新时间:2023-12-01 13:23:32 25 4
gpt4 key购买 nike

make可以将变量赋值作为命令行的一部分。是 DEBUG=1 makemake DEBUG=1 ?使用这个简单的 Makefile,两者都会打印 echo 1 .

$ cat Makefile
all:
echo ${DEBUG}

在后一种情况下很明显, DEBUG=1make 参数的一部分,但第一个似乎只是 shell 中的变量赋值。所以我假设 make以不同的方式获取值。对差异进行一些澄清会有所帮助。

最佳答案

Is DEBUG=1 make the same as make DEBUG=1?



并不真地。
  • DEBUG=1 make :make从环境中获取变量。即shell设置变量DEBUG ,然后 make被执行并且它(运行 make 的进程)继承了该环境变量。
  • make DEBUG=1 :make从命令行获取变量(即:make 设置变量本身)。


  • 相关差异

    从命令行获取的变量会覆盖从环境中获取的变量。也就是说,在:
    DEBUG=0 make DEBUG=1
    DEBUG1 ,不是 0 .

    还要注意,从命令行获取的变量会覆盖 makefile 中设置的变量(除非使用 override 指令),而环境变量不会(除非将选项 -e or --environment-override 传递给 make )。

    因此,如果 makefile 设置了一个名为 DEBUG 的变量如下所示:
    DEBUG = 0
    all:
    @echo ${DEBUG}

    然后:
    make DEBUG=1

    回声 1 , 然而:
    DEBUG=1 make

    回声 0 .
    origin内置函数

    您可以使用 origin 内置函数来找出变量的来源。考虑对您的 makefile 进行以下修改:
    $ cat Makefile
    all:
    @echo DEBUG is from $(origin DEBUG)

    然后:
    $ make DEBUG=1
    DEBUG is from command line

    但:
    $ DEBUG=1 make
    DEBUG is from environment

    关于makefile - make 命令之前和之后的变量赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48888749/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com