Makefile未基于环境变量值设置目标

Makefile未基于环境变量值设置目标,makefile,Makefile,如果设置了特定的环境变量,我希望运行特定的规则,否则运行默认规则。例如,如果未设置环境变量MYTARGETS1,我想运行test1和test2。然而,对于下面的代码,当我使用makerun命令时,总是test1规则正在运行 MYTARGETS1 ?= True ifeq (${MYTARGETS1},True) MYTARGETS = test1 test2 else MYTARGETS = test1 endif test1: echo "test1" test2: e

如果设置了特定的环境变量,我希望运行特定的规则,否则运行默认规则。例如,如果未设置环境变量
MYTARGETS1
,我想运行
test1和test2
。然而,对于下面的代码,当我使用
makerun
命令时,总是
test1
规则正在运行

MYTARGETS1 ?= True 

ifeq (${MYTARGETS1},True)
MYTARGETS = test1 test2
else
MYTARGETS = test1
endif

test1:
    echo "test1"

test2:
    echo "test2"

run: common $(MYTARGETS)

common:
    echo "common"

您的代码中有一个小错误。第一行应该是
MYTARGETS1?=false
或者仅仅是
MYTARGETS1?=
,因为
?=
被称为条件赋值,这意味着如果变量尚未设置,请使用您在此处分配的任何内容进行设置。根据我建议的当前更改,如果将
MYTARGETS1
传递到
make
,则makefile将根据您的要求工作

make MYTARGETS1=true

为什么要投否决票?这是我的要求,我知道一个解决方案可以是使用
MYTARGETS
作为env并传递规则以运行,但我不希望这样!!我只能在实际代码中以
make run
的形式运行这个makefile。这只是一个例子,那么最好删除第一行本身。