makefile:根据布尔环境变量切换变量值

makefile: toggle value of variable based on boolean env var

我有一个设置为 true 或 false 的环境变量 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

运行 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