Gibt es eine Möglichkeit, so etwas wie clang-format --style=Webkit
einen gesamten cpp-Projektordner aufzurufen , anstatt ihn für jede Datei separat auszuführen?
Ich benutze clang-format.py
und vim
mache das, aber ich gehe davon aus, dass es eine Möglichkeit gibt, dies einmal anzuwenden.
c++
clang
clang-format
user3639557
quelle
quelle
clang-format-3.6 -i -style=file *.cpp *.h *.hpp
**
Konstrukten finden Sie unter unix.stackexchange.com/questions/49913/recursive-glob .clang-tidy
?*.cpp
Generieren einer Liste von Dateien sollte funktionieren. Derclang-tidy
Befehl ermöglicht die Übergabe mehrerer Dateien. `USAGE: clang-tidy [options] <source0> [... <sourceN>]` In der Praxis ist dies jedoch möglicherweise nicht der beste Weg. Clang-tidy führt eine viel tiefere Analyse durch, daher sind die Compiler-Flags für jede Datei usw. erforderlich. Wenn ich clang-tidy verwendete, hatte ich normalerweise eine "Kompilierungsdatenbank" - eine JSON-Datei mit den Befehlen für jede Datei und einem Skript, das ausgeführt wurde darüber. Es war vor ein paar Jahren, vielleicht gibt es jetzt einen besseren Weg.Leider gibt es keine Möglichkeit, das Clang-Format rekursiv anzuwenden.
*.cpp
stimmt nur mit Dateien im aktuellen Verzeichnis überein, nicht mit Unterverzeichnissen. Auch**/*
funktioniert nicht.Zum Glück gibt es eine Lösung: greift alle Dateinamen mit dem
find
Befehl und Rohr sie in zum Beispiel, wenn Sie alle formatieren möchten..h
Und.cpp
Dateien im Verzeichnisfoo/bar/
rekursiv, können Sie tunWeitere Informationen finden Sie hier .
quelle
**/*.cpp
scheint in (einigermaßen moderner) Bash zu funktionieren. Möglicherweise müssen Sieshopt -s globstar
vorher.GLOB_RECURSE
alle.cpp
Dateien finden und an diese übergeben könnenclang-format
.find
undxargs
sollte verwendenfind ... -print0
undxargs -0 ...
sicherstellen, dass alle Arten von Dateinamen korrekt behandelt werden.find foo/bar/ -iname '*.h' -o -iname '*.cpp' | xargs clang-format -i
wird das Problem beheben.Erstellen Sie zuerst eine
.clang-format
Datei, falls diese nicht vorhanden ist:Wählen Sie den gewünschten vordefinierten Stil oder bearbeiten Sie die resultierende
.clang-format
Datei.Der Konfigurator im Clang-Format ist hilfreich.
Dann renne:
find . -regex '.*\.\(cpp\|hpp\|cc\|cxx\)' -exec clang-format -style=file -i {} \;
Andere Dateiendungen als
cpp
,hpp
,cc
undcxx
können im regulären Ausdruck verwendet werden, stellen Sie sicher , sie mit zu trennen\|
.quelle
-style=file
es eine Möglichkeit, einen benutzerdefinierten Dateipfad anzugeben? Ich habe es versucht-style=~/.clang-format
und es funktioniert nicht.cp ~/.clang-format .
den Befehl find in Ihrer Antwort ausführt.Ich habe kürzlich ein Bash-Skript gefunden, das genau das tut, was Sie brauchen:
https://github.com/eklitzke/clang-format-all
Unter Windows habe ich es erfolgreich in Git Bash und WSL verwendet.
quelle
Für Windows-Benutzer: Wenn Sie Powershell 3.0 unterstützen, können Sie Folgendes tun:
Hinweis 1: Verwenden Sie
pushd .
und,popd
wenn Sie vor und nach dem Skript dasselbe aktuelle Verzeichnis haben möchtenHinweis 2: Das Skript wird im aktuellen Arbeitsverzeichnis ausgeführt
Hinweis 3: Dies kann wahrscheinlich in einer einzigen Zeile geschrieben werden, wenn Ihnen das wirklich wichtig war
quelle
Ich verwende den folgenden Befehl, um alle Objective-C-Dateien unter dem aktuellen Ordner rekursiv zu formatieren :
$ find . -name "*.m" -o -name "*.h" | sed 's| |\\ |g' | xargs clang-format -i
Ich habe den folgenden Alias in meinem definiert
.bash_profile
, um die Sache zu vereinfachen:# Format objC files (*.h and *.m) under the current folder, recursively alias clang-format-all="find . -name \"*.m\" -o -name \"*.h\" | sed 's| |\\ |g' | xargs clang-format -i"
quelle
Hier ist eine Lösung, die rekursiv sucht und alle Dateien in einem Befehl als Dateiliste in das Clang-Format weiterleitet. Es schließt auch das "build" -Verzeichnis aus (ich verwende CMake), aber Sie können einfach den "grep" -Schritt weglassen, um das zu entfernen.
shopt -s globstar extglob failglob && ls **/*.@(h|hpp|hxx|c|cpp|cxx) | grep -v build | tr '\n' ' ' | xargs clang-format -i
quelle
In der modernen Bash können Sie den Dateibaum rekursiv crawlen
for file_name in ./src/**/*.{cpp,h,hpp}; do if [ -f "$file_name" ]; then printf '%s\n' "$file_name" clang-format -i $file_name fi done
Hier wird angenommen, dass sich die Quelle in befindet
./src
und.clang-format
die Formatierungsinformationen enthält.quelle