我试图识别flexc ++程序的版本与CMake的正则表达式。
的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\\+\\+
?
我怎么解决这个问题?