CMake: как получить литерал обратной косой черты в Regexp заменить?
Я пытаюсь заменить forwardslhes на обратную косую черту.
Для этого у меня есть следующая строка кода:
STRING(REGEX REPLACE "/" "\\" SourceGroup ${SourceGroupPath} )
SourceGroupPath = A/Файл/Путь.
SourceGroup - это переменная, чтобы установить результат.
Проблема, с которой я столкнулась, связана с частью "\\" с кодом.
Я пробовал несколько способов использовать обратный знак, похожий на "\\",
и используя unicode, но ничего не работает.
Ошибка, которую я получаю в CMake:
Ошибка CMake в CMakeLists.txt: 41 (STRING): строковая подкоманда REGEX, режим ЗАМЕНИТЬ: Заменить выражение в обратном слэше.
Кто-нибудь может помочь мне?
Спасибо,
Wouter
Ответы
Ответ 1
Причина в том, что в литерал-строке CMake обратная косая черта - это escape-символ (как в C, Java или JavaScript), так и в regex, обратная косая черта также является escape-символом.
Итак, чтобы представить регулярное выражение как строковый литерал, вам нужно выполнить двойное экранирование. (Вот почему многие языки "высшего уровня" имеют буквенное обозначение регулярного выражения, BTW.)
Строковый литерал "\\"
представляет строку in-memory "\"
и что недопустимое регулярное выражение, поэтому ошибка "заканчивается в обратном слэше".
Строковый литерал "\\\\"
представляет "\\"
в памяти, который является допустимым регулярным выражением (представляющим одну обратную косую черту).
Ответ 2
Это более простой способ сделать это
file(TO_NATIVE_PATH ${MYPATH} MYPATH)