makefile - 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]},$(MYVARIABLE1[9]},$(MYVARIABLE1[11]},' ','A','A'}"
CFLAGS+=-DMYVARIABLE2=${MYVARIABLE2}

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

错误:',' 标记前的预期表达式

在 C 代码中:
 uint8 OTHERVARIABLE[]            =  MYVARIABLE2;

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

最佳答案

在 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 单独引用版本的各个部分功能。

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

关于makefile - makefile 中的变量(如何使用数组),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49983726/

相关文章:

c++ - 将 3rd 方头文件放在源代码树中的什么位置?

c - 生成文件说明

makefile - 如何通过 Makefile 将日期回显到文件中?

c++ - Dynamic#include 基于宏定义

python - 如何在 Windows 中安装 pacparser?

c++ - 提高从 qmake 生成的 Makefile 性能

makefile - 在 GNU make 中保留 $^ 中先决条件的顺序

linux - 创建 Docker 镜像时 Makefile 错误

c - 完全相同的命令行在 Make 中产生错误,但如果从 shell 运行则成功

iphone - 我为使用 makefile 构建的 iO 寻找库项目