让我们定义以下 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
。
提前感谢您的想法。
好的我可以回答我自己的问题:
此调用是之前由
cmake_parse_arguments
处理的 CMake 函数体的一部分,该函数体似乎已经砍掉了 ;
。
使用新的
cmake_parse_arguments(PARSE_ARGV ...)
函数解决了问题,如 cmake_parse_arguments 中所述