C转义“;”将列表转换为字符串时在列表项中

问题描述 投票:0回答:1

让我们定义以下 CMake 列表:

set(options
  "-DVERSION=\\\"42\\\""
  "-DADDITIONAL_VERSIONS=\"MODULE_INFO(my_module, \\\"42.0\\\")\\;\"")

我需要将

options
列表转换为传递给 C 编译器的字符串,如下所示:

"-DVERSION=\"42\" -DADDITIONAL_VERSIONS="MODULE_INFO(my_module, \"42.0");""

我已经设法让一切正确,但“;”无论我尝试什么,模块信息都会被跳过:

  • string(REPLACE ";" " " options_text "${options}")
  • string(REGEX REPLACE "([^\\]);" "\\1 <replaced>" options_text "${options}")
  • string(JOIN " " options_text "${options}")
  • foreach
    在列表上,检查空项目并替换它们...

最终,我必须能够处理任何有效且正确转义的 C 预处理器

define

提前感谢您的想法。

linux cmake build
1个回答
0
投票

好的我可以回答我自己的问题:

此调用是之前由

cmake_parse_arguments
处理的 CMake 函数体的一部分,该函数体似乎已经砍掉了
;

使用新的

cmake_parse_arguments(PARSE_ARGV ...)
函数解决了问题,如 cmake_parse_arguments

中所述
© www.soinside.com 2019 - 2024. All rights reserved.