If statement makefile:基于布尔环境变量切换变量值

If statement makefile:基于布尔环境变量切换变量值,if-statement,makefile,boolean,If Statement,Makefile,Boolean,我有一个设置为true或false的env-var集成 我想根据INTEGRATION设置为true还是false来设置变量的值 我试过: ifeq ($(INTEGRATION),false) PRODUCTION_URL="production" else PRODUCTION_URL="integration" endif 而且 if [ ${SNOOTY_INTEGRATION} == false ]; then \ echo

我有一个设置为true或false的env-var集成

我想根据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
在终端中,我运行
makehelp

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
本质上与(更常见和更短的)相同:

(仅为此调用
make
设置变量)

但你不能使用:

$ env INTEGRATION=true
$ make help
ETA

如果这不起作用,那么你的环境中肯定还有一些你没有解释的东西。请提供一个完整的自包含示例来说明问题。例如,我不知道您在问题中显示的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

运行
env INTEGRATION=true
是错误的

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

您可以使用:

$ export INTEGRATION=true
$ make help
(在shell中设置变量,以便所有后续命令都可以看到它,直到再次取消导出为止),或者可以使用:

$ env INTEGRATION=true make help
本质上与(更常见和更短的)相同:

(仅为此调用
make
设置变量)

但你不能使用:

$ env INTEGRATION=true
$ make help
ETA

如果这不起作用,那么你的环境中肯定还有一些你没有解释的东西。请提供一个完整的自包含示例来说明问题。例如,我不知道您在问题中显示的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“产品url您确定没有键入错误的变量名称吗?该值不可能为空,因为if语句会将其设置为一个值或另一个值。所以我只能建议您输入了一个变量名,另外请注意,您确实不希望在makefile变量赋值中包含引号。引号并不特别,所以这些变量的值实际上也包含引号,这可能不是您想要的。谢谢您的重要提示!我仍然没有得到想要的行为-设置
export INTEGRATION=false
,然后运行
make help
生成
echo“产品url您确定没有键入错误的变量名称吗?该值不可能为空,因为if语句会将其设置为一个值或另一个值。所以我只能建议您输入了一个变量名,另外请注意,您确实不希望在makefile变量赋值中包含引号。引号并不特别,所以这些变量的值实际上也包含引号,这可能不是您想要的。