Команда CMake file выдает «Недопустимая escape-последовательность \».для правила регулярных выражений - PullRequest
0 голосов
/ 11 мая 2018

Я пытаюсь сделать:

file(GLOB SOURCES "^[^.]+(?!\.in)\.c")

для сопоставления любому файлу с именем anything.c, но не с именами anything.in.c, но выдает ошибку

Invalid escape sequence \.

Я пытался

file(GLOB SOURCES "*.c")
list(REMOVE_ITEM SOURCES "*.in.c")

не полагаться на регулярное выражение, но похоже, что list команда не поддерживает регулярное выражение, как file делает

1 Ответ

0 голосов
/ 11 мая 2018

Чтобы уладить дело, вам нужно избежать периода с двумя обратными слешами, а не с одной.

Ссылаясь на документацию CMake по командам файла:

file (переменная GLOB [RELATIVE path] [globbing выражений] ...)

Создать список файлов, соответствующих <globbing-expressions>, и сохранить его в <variable>.Глобальные выражения похожи на регулярные выражения, но гораздо проще.

Так что, возможно, это не регулярное выражение, а вопрос глобализации.

Документация по строковым операциям notes:

Обратите внимание, что в коде CMake требуются две обратные косые черты (\ 1) для получения обратной косой черты при разборе аргументов.

Итак, экранирование .с \\ соответствует документации.

Тем не менее, цитирование из вики сообщества Использование регулярных выражений CMake: Escapeing

Иногда вам необходимо экранировать$

  • В регулярном выражении, за пределами [] вам нужно \\$
  • В регулярном выражении, внутри [] вам ничего не нужно.[$] в порядке.
  • В строке без регулярных выражений перед фигурной скобкой вам нужно \${

set(blah "whatever but \${do_not_evaluate}")
  • В строке регулярного выражения перед фигурной скобкой вам нужно \\\${

string(REGEX REPLACE
  ".*whatever but \\\${do not evaluate}"

Таким образом, как R .. сказал, что в CMake это хорошая привычка для регулярных выражений и глобальных выражений, использующих [] для экранирования специальных символов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...