变量中Makefile命令的条件包含/执行?

变量中Makefile命令的条件包含/执行?,makefile,Makefile,我正在使用一个Makefile,它是我从某处得到的,非常大。我还发现了一些我希望在makefile中偶尔更改的东西——对我来说,最简单的方法是在makefile的开头定义(或不定义)一个(switch)变量(比如,OVWRCHOICE);然后在后面的makefile代码中,执行如下操作: ifdef OVWRCHOICE MYOPT = override .... endif 。。。这一切都是美好的 问题是,最终我还需要更改“覆盖”部分中的部分,所以我希望它位于文件的开头。因此,由于这

我正在使用一个Makefile,它是我从某处得到的,非常大。我还发现了一些我希望在makefile中偶尔更改的东西——对我来说,最简单的方法是在makefile的开头定义(或不定义)一个(switch)变量(比如,
OVWRCHOICE
);然后在后面的makefile代码中,执行如下操作:

ifdef OVWRCHOICE
  MYOPT = override
  ....
endif
。。。这一切都是美好的

问题是,最终我还需要更改“覆盖”部分中的部分,所以我希望它位于文件的开头。因此,由于这个“覆盖”部分包含多个
make
命令——我尝试使用
define
,以获得一个包含命令的变量(将在
ifdef OVWRCHOICE…
部分执行)

所以我得出了一个简单的例子:

# uncomment as needed;
OVWRCHOICE = YES

define SET_OVWRCHOICE
  MYOPT = override
endef
export SET_OVWRCHOICE

# ... many lines of code ...

MYOPT = default

# ... many lines of code...

# without indent:  Makefile:18: *** missing separator.  Stop.
# with tab indent: Makefile:18: *** commands commence before first target.  Stop.
ifdef OVWRCHOICE
    $(SET_OVWRCHOICE)
endif

all:
    @echo $(MYOPT)
。。。它失败,并记录了错误。当然,如果我使用文章中的第一个代码段,所有代码都会正常运行,并且
make
会打印出预期的结果:“override”


我将如何着手实现这样的目标?不确定“Makefile命令”的“包含”或“执行”在本文中是否是正确的术语;所以我很难找到一个搜索的起点:)

明白了-这在中有描述;正确的结构是:

ifdef OVWRCHOICE
$(eval $(call SET_OVWRCHOICE))
endif
希望这对某人有所帮助,

干杯

哦,好吧,我真的不知道把这个片段存档在哪里,所以回到我的老问题:)这不是OP的主题;但这里有:

要测试makefile如何处理环境变量,下面是一个简单的示例:

Foo=something
all :
ifdef DEBUG
    @echo "Debug defined"
else
    @echo "Debug NOT defined"
endif
。。。下面是对它的测试:

$ make
Debug NOT defined
$ make DEBUG
make: *** No rule to make target `DEBUG'.  Stop.
$ DEBUG make
DEBUG: command not found
$ DEBUG= make
Debug NOT defined
$ DEBUG=1 make
Debug defined
。。。显然,从命令行在makefile中设置该变量的正确语法是:“
DEBUG=1 make