CMake解析含分号(;)的JSON字符串失败,是否为Bug?
问题分析与解决方案
这不是CMake的Bug,是你忽略了CMake中分号作为列表分隔符的特性导致的操作疏漏。
在CMake中,分号;是默认的列表元素分隔符。当你直接使用${JSON2}时,CMake会把这个变量值拆分成两个列表项:"{ \"message\": \"hello" 和 "world\" }",传递给string(JSON)命令的就不再是完整的JSON字符串,自然会触发解析错误。
修复方法
在引用包含分号的变量时,用双引号将变量包裹起来,强制CMake将其作为单个完整字符串传递:
cmake_minimum_required(VERSION "3.19.0") set(JSON1 "{ \"message\": \"hello world\" }") set(JSON2 "{ \"message\": \"hello;world\" }")#字符串内包含';' string(JSON message1 GET ${JSON1} "message")#执行正常 string(JSON message2 GET "${JSON2}" "message")#添加双引号包裹变量,执行正常 project("blabla")
这样${JSON2}会被当作整体传递给string(JSON)命令,JSON解析就能正常识别包含分号的字符串值了。
内容的提问来源于stack exchange,提问作者PinkTurtle
相关产品推荐
相关产品推荐

