Причина в том, что в строковом литерале CMake обратная косая черта является escape-символом (как в C, Java или JavaScript), а в регулярном выражении обратная косая черта также является escape-символом .
Таким образом, чтобы представить регулярное выражение в виде строкового литерала, необходимо двойное экранирование. (Вот почему многие языки «более высокого уровня» имеют буквенное обозначение регулярного выражения, BTW.)
Строковый литерал "\\"
представляет строку в памяти "\"
, и это недопустимое регулярное выражение,следовательно, ошибка «заканчивается на обратной косой черте».
Строковый литерал "\\\\"
представляет "\\"
в памяти, который является допустимым регулярным выражением (представляющим одну обратную косую черту).