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

makefiles中的变量(如何使用数组),makefile,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]},$(MYVARIABL

我在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中定义的部分变量的正确方法吗

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


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

make语法中没有“array”或list变量

有一些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
函数单独引用版本的各个部分


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

谢谢您提供的这些信息!我在GNU make文档中搜索什么有点麻烦,因为数组作为搜索字符串是完全错误的;)。通过这种方法,它可以工作。