我在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中定义的部分变量?
答案 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语法。