我有一个(g)make脚本,涵盖了很多微控制器目标。 if块序列测试各种目标并设置(或追加)许多变量。
ifeq ($(CHIP),lpc1114fn28)
CORE_FLAGS := -mcpu=cortex-m0 -mthumb
CORE_FLAGS += -nostartfiles -fno-exceptions
CORE_CPP_FLAGS += -fno-threadsafe-statics -fno-use-cxa-get-exception-ptr
XTAL := 12000000
. . .
endif
有很多重复,我想要考虑一下。我试过了
define Cortex-M0 =
CORE_FLAGS := -mcpu=cortex-m0 -mthumb
CORE_FLAGS += -nostartfiles -fno-exceptions
endef
ifeq ($(CHIP),lpc1114fn28)
$(eval $(Cortex-M0))
CORE_CPP_FLAGS += -fno-threadsafe-statics -fno-use-cxa-get-exception-ptr
XTAL := 12000000
. . .
endif
但这似乎不起作用。有没有办法执行一个可以包含多行的类子程序?我知道我可以使用包含文件,但我想将所有内容保存在一个文件中。
答案 0 :(得分:0)
可能是这样的:
ifeq ($(CHIP),lpc1114fn28)
$(eval $(call Cortex-M0))
答案 1 :(得分:0)
如果这不起作用,那么很可能你的GNU make版本早于3.82。语法define VARIABLE =
在该版本中引入;旧版本不允许您使用赋值运算符(=
,:=
等)。如果make在那里看到它将分配一个名为VARIABLE =
的变量(或者你的情况,Cortex-M0 =
)。
删除=
行末尾的define
,它可以与旧版本的GNU make一起使用。
请记住,本手册的在线版本描述了最新版本的GNU make;如果您不使用该版本,则应注意您使用的版本支持您想要的功能。阅读提供给您的手册版本以及您正在使用的GNU make软件包始终是最安全的:无论是您的软件包管理器还是您自己从某个地方下载的软件包。