Windows-Äquivalent für reguläre Unix-Ausdrücke

324
baxbear

Gibt es einen Ersatz für

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

damit ich etw so machen kann:

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

(so gehe ich, wenn ich kein Makefile verwende)

unter Windows habe ich es so gemacht:

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

weil reguläre Ausdrücke nicht zu funktionieren scheinen oder ich keinen Weg finden konnte, sie zum Laufen zu bringen ...

Könnten Sie mir sagen, wie es unter Windows geht?

0
Zunächst verwenden Sie keinen regulären Ausdruck, sondern reguläre Platzhalter. "**" wäre kein regulärer Ausdruck, da es sich hierbei um einen Quantifizierer handelt und das Quantifizieren von "einer beliebigen Anzahl von Elementen und einer beliebigen Anzahl von Elementen" ist nicht sehr sinnvoll. Unter Windows können Sie `src / *. Cpp` verwenden. Was Sie vermissen, ist ein Platzhalter für "jede CPP-Datei in jedem Verzeichnis". Normalerweise würden Sie dafür ein Skript verwenden. In diesem Fall könnten Sie ein PowerShell-Skript verwenden, das die Dateien sammelt und eine Zeichenfolge erstellt, die Sie als Parameter für GCC verwenden können. Seth vor 7 Jahren 2
Naja indirekt ist auch * ein regulärer Ausdruck, da die Sprache die genau Sigma akzeptiert. baxbear vor 7 Jahren 0
Wenn Sie mit dieser Definition zufrieden sind, ist das in Ordnung. Wenn Sie jedoch nicht in der Lage sind, `ls ./ [aZ] /.*` zu tun, entspricht dies nicht der technischen Definition eines regulären Ausdrucks und das `**` wäre immer noch eine Verletzung / Unsinn von dem, was es ist normalerweise als regulärer Ausdruck in technischen Systemen akzeptiert. In meinem `ls'-Beispiel müssten Sie wahrscheinlich auch den ersten Punkt entziehen, um ihn zu einem wörtlichen und nicht zu einem beliebigen Zeichen zu machen. Seth vor 7 Jahren 0

1 Antwort auf die Frage

0
Seth

Je nachdem, wann Sie absolute Pfade verwenden können, können Sie den folgenden Teil des PowerShell-Codes verwenden:

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

Sie können dies möglicherweise verkürzen auf:

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

Dies ist nicht genau so kurz oder lesbar wie Ihr Linux-Äquivalent, aber das, was ich mir vorstellen kann, um das gewünschte Ergebnis zu erzielen.

Wenn Sie srceine flache Hierarchie haben, können Sie Folgendes verwenden:

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