我尝试在 CMake 中使用正则表达式识别 flexc++ 程序的版本。
flexc++ 版本的输出类似于:
prompt$ flexc++ --version
flexc++ V1.01.00
我尝试使用正则表达式提取版本。可执行文件的名称在一个变量中(这个变量是其他命令的输出)。问题是 flexc++ 名称中的字符串“++”。此字符串与符号“+”(一个或多个匹配项)产生冲突。一个小测试:
set(sample "flexc++ V1.01.00")
set(flexname "flexc++")
string(REGEX REPLACE "^${flexname} V([0-9.]+)$" "\\1"
output "${sample}")
message("${output}")
抛出下一个错误:
RegularExpression::compile(): Nested *?+.
RegularExpression::compile(): Error in compile.
CMake Error at prueba.cmake:4 (string):
string sub-command REGEX, mode REPLACE failed to compile regex "^flexc++
V([0-9.]+)$".
如果我删除示例和文件名变量中的“++”字符串,它会识别出完美的版本:
set(sample "flexc V1.01.00")
set(flexname "flexc")
string(REGEX REPLACE "^${flexname} V([0-9.]+)$" "\\1"
output "${sample}")
message("${output}")
输出:
1.01.00
这意味着问题是“++”字符串。
我怎样才能避免这个问题?例如,在 CMake 中是否有任何命令,例如:
scape(flexname_scaped ${flexname})
表演
flexname_scaped <-- flexc\\+\\+
?
我怎么解决这个问题?