【问题标题】:makefile: toggle value of variable based on boolean env varmakefile:基于布尔 env var 切换变量的值
【发布时间】:2021-01-13 18:05:43
【问题描述】:

我有一个设置为 true 或 false 的 env var INTEGRATION。

我想根据 INTEGRATION 设置为 true 还是 false 来设置变量的值。

我试过了:

ifeq ($(INTEGRATION),false)
  PRODUCTION_URL="production" 
else
  PRODUCTION_URL="integration"
endif

还有

if [ ${SNOOTY_INTEGRATION} == false ]; then \
    echo "HIT THE TRUTH"; \
    PRODUCTION_URL="https://docs.mongodb.com"; \
fi

运行后

export INTEGRATION=true
make help

在终端中,我运行make help:

help:
    echo "prod url ${PRODUCTION_URL}";

在第一种情况下,它打印prod url integration,在第二种情况下,它打印prod url ——当期望的行为是让它打印时,prod url production

【问题讨论】:

    标签: if-statement makefile boolean


    【解决方案1】:

    运行env INTEGRATION=true 是错误的。

    这不会在当前 shell 中设置环境变量:它只会在 env 命令中设置该环境变量。

    您可以使用:

    $ export INTEGRATION=true
    $ make help
    

    (在shell中设置变量,以便所有后续命令都可以看到它,直到您再次取消导出它),或者您可以使用:

    $ env INTEGRATION=true make help
    

    这与(更常见和更短的)基本相同:

    $ INTEGRATION=true make help
    

    (仅为make 的调用设置变量)。

    但你不能使用:

    $ env INTEGRATION=true
    $ make help
    

    预计到达时间

    如果这不起作用,那么您的环境中一定有其他您没有解释的东西。请提供一个完整的独立示例来说明问题。例如,我不知道您在问题中显示的 shell if 语句是什么,或者它与您问题的其余部分有何关系。这对我有用:

    $ cat Makefile
    ifeq ($(INTEGRATION),false)
      PRODUCTION_URL="production"
    else
      PRODUCTION_URL="integration"
    endif
    
    help:
            echo "prod url ${PRODUCTION_URL}";
    
    $ make help
    echo "prod url "integration"";
    prod url integration
    
    $ export INTEGRATION=true
    $ make help
    echo "prod url "integration"";
    prod url integration
    
    $ export INTEGRATION=false
    $ make help
    echo "prod url "production"";
    prod url production
    

    【讨论】:

    • 感谢您的重要说明!我仍然没有得到想要的行为 - 设置 export INTEGRATION=false 然后运行 ​​make help 导致 echo "prod url <empty-space>;
    • 你确定你没有打错变量名吗? value 不可能为空,因为 if 语句会将其设置为一个值或另一个值。所以我只能建议您输入错误的变量名。
    • 另外请注意,您真的不想在 makefile 变量赋值中包含引号。引号并不特殊,因此这些变量的值实际上也包含引号,这可能不是您想要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-10
    • 1970-01-01
    • 2012-05-01
    • 2017-08-24
    • 1970-01-01
    • 2021-09-02
    • 1970-01-01
    相关资源
    最近更新 更多