Мені шкода, якщо це здається нуб-питанням, але у мене проблеми з правильним розумінням цієї команди, і Google мені не допоміг.
Скажімо, у мене є цей скрипт CMake:
набір (OUTDIR $ {CMAKE_CURRENT_BINARY_DIR} / MyFolder) рядок (REGEX ЗАМІНИТИ "/" "" OUTDIR $ {OUTDIR})
Подібний приклад я знайшов у книзі.Я спробував прочитати пояснення там разом із документацією, але мені все ще не зовсім зрозуміло, що робить цей фрагмент. Як я зрозумів з документації: REGER REPLACE замінить "/" на "" кожного разу, коли знайде його та поверне результат у вихідний файл. Тож у цьому випадку вихід буде який? Папка "OUTDIR", яка є шляхом, визначеним вище із набором? Я не розумію, чому це "OUTDIR $ {OUTDIR}", а не просто "$ {OUTDIR}". Допоможіть мені усунути цю плутанину, пояснивши цей фрагмент. Дякую
Відповіді:
0 для відповіді № 1Ви майже правильно зрозуміли першу частину. Річ у тому, що перші два рядкові літерали після ЗАМІНА REGEX - це два RegExes (регулярні вирази).Отже, ця функція знайде всі збіги першого RegEx у останньому вказаному вами рядку та замінить їх значенням, що надходить з другого RegEx. Результат буде збережено у цій рядковій змінній перед останньою.
Зараз у регулярних виразах деякі символи мають особливе значення, вони називаються спеціальні символи. Зворотний слеш - одна з них. Якщо ви хочете, щоб цей персонаж поводився як звичайний персонаж, ви повинні Втеча це, ставлячи перед ним зворотну скісну риску.
Тепер у літералі рядка CMake ви також повинні уникнути символу зворотної риски, поставивши перед ним ще одну зворотну риску.
Це, як сказано, для того, щоб ваш код замінив OUTDIR все / з ви хотіли б написати так:
set (OUTDIR ${CMAKE_CURRENT_BINARY_DIR}/MyFolder)
string (REGEX REPLACE "/" "\\" OUTDIR ${OUTDIR})
Це пов'язане питання: CMake: як замінити літерал зворотної косої риски в Regexp?
Ви можете дізнатись більше про RegEx тут: https://www.regular-expressions.info