CMakeの正規表現でflexc++プログラムのバージョンを認識しようとしています。
flexc++ バージョンの出力は次のようになります。
prompt$ flexc++ --version
flexc++ V1.01.00
正規表現でバージョンを抽出しようとしています。実行可能ファイルの名前は変数にあります (この変数は他のコマンドの出力です)。問題は、flexc++ 名の文字列「++」です。この文字列は、記号「+」と競合します (1 つ以上の一致)。ミニテスト:
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\\+\\+
?
どうすればこの問題を解決できますか?