Windows-эквивалент для регулярных выражений Unix

269
baxbear

Есть ли замена для

**/*.* **/*.cpp 

так что я могу сделать что-то вроде этого:

gcc -std=c++14 -I ./include/ -o ./bin/main ./src/**/*.cpp 

(путь, которым я иду, когда я не использую make-файл)

на окнах я сделал это так:

gcc -std=c++14 -I include -o bin/main src/main.cpp src/Sth.cpp src/SthEl.cpp 

потому что регулярные выражения не работают или я не смог найти способ заставить их работать ...

Не могли бы вы сказать мне, как это сделать на Windows?

0
Для начала вы используете не регулярное выражение, а обычные символы подстановки. `**` не будет регулярным выражением, так как это квантификатор и количественная оценка «любое количество элементов, любое количество элементов» не имеет большого смысла. В Windows вы можете использовать `src / *. Cpp`. То, что вам не хватает, это подстановочные знаки, означающие «каждый файл cpp в каждом каталоге». Обычно вы бы использовали скрипт для этого. В этом случае вы можете использовать сценарий PowerShell, который собирает файлы и создает строку, которую можно использовать в качестве параметра для GCC. Seth 7 лет назад 2
Надежный справочник * * * * * * Ein Regulärer Ausdruck, da die Sprache die genau Sigma * akzeptiert damit impliziert wird. baxbear 7 лет назад 0
Если вы чувствуете себя счастливым с этим определением, это нормально. Но если вы не можете выполнить `ls ./ [aZ] /.*`, это не соответствует техническому определению регулярного выражения, и `**` все равно будет нарушением / бессмысленностью того, что обычно принимается как регулярное выражение в технических системах. Кроме того, в моем примере `ls` вам, вероятно, потребуется экранировать первую точку, чтобы сделать ее литералом, а не каким-либо символом. Seth 7 лет назад 0

1 ответ на вопрос

0
Seth

В зависимости от того, когда вы можете использовать абсолютные пути, вы можете использовать следующий фрагмент кода PowerShell:

$files = (Get-ChildItem -Recurse -Path ./src *.cpp | %) -Join " " gcc -std=c++14 -I include -o bin/main $files 

Вы можете сократить это до:

gcc -std=c++14 -I include -o bin/main ((Get-ChildItem -Recurse -Path ./src *.cpp | %) -Join " ") 

Он не такой короткий и не читаемый, как ваш эквивалент в Linux, но самый близкий, который я могу придумать, чтобы достичь желаемого результата.

Если у вас srcплоская иерархия, вы можете использовать:

gcc -std=c++14 -I include -o bin/main src/*.cpp