makefile中的变量(如何使用数组)

时间:2018-04-23 14:36:19

标签: makefile

我在makefile中有编译器标志,如下所示:

MYVARIABLE1=HELLO 4.5.6
MYVARIABLE2"="{0x95,0x04,0x05,0x06,' ','A','A'}"
CFLAGS+=-DMYVARIABLE2=${MYVARIABLE2}

工作正常。但是如果我想在VARIABLE1中使用已知的信息来创建VARIABLE2:

MYVARIABLE1=HELLO 4.5.6
MYVARIABLE2"="{0x95,$(MYVARIABLE1[7]},$(MYVARIABLE1[9]},$(MYVARIABLE1[11]},' ','A','A'}"
CFLAGS+=-DMYVARIABLE2=${MYVARIABLE2}

但是当我使用第二个选项运行我的makefile时,它会使用CFLAG在c文件处停止编译并显示错误消息:

错误:','标记

之前的预期表达式

中的C代码:

 uint8 OTHERVARIABLE[]            =  MYVARIABLE2;

问题:真的$(MYVARIABLE1 [x]}是否正确使用makefile中定义的部分变量?

2 个答案:

答案 0 :(得分:2)

没有"数组"或者在make语法中列出变量。

有一些GNU make函数可以对字符串的每个单词进行操作,一次一个,其中一个单词是空格分隔的值。这可以被认为是一种阵列,一种。这就是为什么make几乎不可能处理包含空格的路径的原因。

如果你不使用GNU make,那么这一切都不会起作用。

要执行您想要的操作,您必须将MYVARIABLE1值拆分为单独的单词,然后您可以使用函数访问单个单词。这样的事情会起作用:

MYVARIABLE1 = HELLO 4.5.6
__var1 = $(subst ., ,$(MYVARIABLE1))
MYVARIABLE2 = "{0x95,$(word 2,$(__var1)),$(word 3,$(__var1)),$(word 4,$(__var1)),' ','A','A'}"

subst函数将.替换为空格,结果为HELLO 4 5 6,以便您可以使用word函数单独引用版本的各个部分。< / p>

您可以找到有关GNU make函数in the documentation的更多信息。

答案 1 :(得分:0)

  

真正的$(MYVARIABLE1[x]}是否正确使用makefile中定义的变量部分?

它是有效的bash语法,但不是有效的GNU make语法。