(g)制作子程序或程序?

时间:2013-07-19 06:11:44

标签: makefile gnu-make

我有一个(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

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

2 个答案:

答案 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软件包始终是最安全的:无论是您的软件包管理器还是您自己从某个地方下载的软件包。