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