3

我有一个涵盖许多微控制器目标的 (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

但这似乎不起作用。有没有办法执行可以包含多行的类似子程序的构造?我知道我可以使用包含文件,但我想将所有内容保存在一个文件中。

4

2 回答 2

0

可能是这样的:

ifeq ($(CHIP),lpc1114fn28)
   $(eval $(call Cortex-M0))
于 2013-07-19T09:21:45.223 回答
0

如果这不起作用,那么您的 GNU make 版本很可能早于 3.82。define VARIABLE =该版本中引入了语法;旧版本不允许您使用赋值运算符(=,:=等)。如果 make 在那里看到它,它将分配一个按字面意思命名的变量VARIABLE =(或在您的情况下为Cortex-M0 =)。

删除该行=末尾的 ,define它将适用于旧版本的 GNU make。

请记住,该手册的在线版本描述了 GNU make 的最新版本;如果您不使用该版本,则应注意您使用的版本是否支持您想要的功能。阅读提供给您的手册版本以及您正在使用的 GNU make 软件包总是最安全的:无论是您的软件包管理器还是您自己从某个地方下载的。

于 2013-07-19T11:42:29.137 回答