为何meson会将我添加的cflags参数带单引号解析导致编译报错?
问题原因
Meson 中传递给c_args的参数要求每个编译标记是单独的数组元素。你将-ggdb和-O0两个参数写在同一个字符串'-ggdb -O0'中时,Meson 会把整个字符串识别为一个单一的参数传递给编译器。为了避免字符串中间的空格被 shell 错误拆分,Meson 会自动给带空格的参数加上单引号转义,最终就出现了你观察到的参数带单引号的情况,和你定义变量时用的引号类型没有关系。
解决方法
将两个参数拆分为独立的元素添加到default_cflags数组即可,有两种等价写法:
写法1:逐行添加
default_cflags += '-ggdb' default_cflags += '-O0'
写法2:一次性批量添加
default_cflags += ['-ggdb', '-O0']
补充说明:你之前的代码运行正常,是因为之前每次添加的都是单个不带空格的参数,Meson 不需要做转义处理,自然不会额外生成单引号。你尝试更换双引号、不加引号都无法解决问题,也是因为没有命中核心问题:多个参数合并到同一个字符串中,不管用什么引号包裹,只要字符串带空格,Meson 都会按单个参数做转义处理。
内容的提问来源于stack exchange,提问作者Brydon Gibson
相关产品推荐
相关产品推荐

