Existe-t-il un moyen d'appeler quelque chose comme clang-format --style=Webkit
pour un dossier de projet cpp entier, plutôt que de l'exécuter séparément pour chaque fichier?
J'utilise clang-format.py
et vim
pour le faire, mais je suppose qu'il existe un moyen de l'appliquer une fois.
c++
clang
clang-format
user3639557
la source
la source
clang-format-3.6 -i -style=file *.cpp *.h *.hpp
**
construct.clang-tidy
?*.cpp
pour générer une liste de fichiers devrait fonctionner. Laclang-tidy
commande permet de passer plusieurs fichiers. `UTILISATION: clang-tidy [options] <source0> [... <sourceN>]` En pratique, ce n'est peut-être pas la meilleure solution. Clang-tidy effectue une analyse beaucoup plus approfondie, il nécessite donc les drapeaux du compilateur pour chaque fichier, etc. par-dessus. C'était il y a quelques années, il y a peut-être un meilleur moyen maintenant.Malheureusement, il n'existe aucun moyen d'appliquer le format clang de manière récursive.
*.cpp
ne correspondra qu'aux fichiers du répertoire courant, pas aux sous-répertoires. Même**/*
ne fonctionne pas.Heureusement, il existe une solution: saisissez tous les noms de fichiers avec la
find
commande et indiquez-les. Par exemple, si vous souhaitez formater tous les fichiers.h
et tous les.cpp
fichiers du répertoire defoo/bar/
manière récursive, vous pouvez faireVoir ici pour une discussion supplémentaire.
la source
**/*.cpp
semble fonctionner en bash (raisonnablement moderne). Vous devrez peut-êtreshopt -s globstar
avant.GLOB_RECURSE
pour trouver tous les.cpp
fichiers et les transmettreclang-format
.find
etxargs
doit utiliserfind ... -print0
etxargs -0 ...
pour garantir que tous les types de noms de fichiers sont gérés correctement.find foo/bar/ -iname '*.h' -o -iname '*.cpp' | xargs clang-format -i
résoudra le problème.Créez d'abord un
.clang-format
fichier s'il n'existe pas:Choisissez le style prédéfini de votre choix ou modifiez le
.clang-format
fichier résultant .Le configurateur de format clang est utile.
Puis exécutez:
find . -regex '.*\.\(cpp\|hpp\|cc\|cxx\)' -exec clang-format -style=file -i {} \;
D' autres extensions de fichier que
cpp
,hpp
,cc
etcxx
peuvent être utilisés dans l'expression régulière, il suffit de les séparer par\|
.la source
-style=file
existe-t-il un moyen de spécifier un chemin de fichier personnalisé? J'ai essayé-style=~/.clang-format
et ça ne marche pas.cp ~/.clang-format .
la commande find dans votre réponse.J'ai récemment trouvé un script bash qui fait exactement ce dont vous avez besoin:
https://github.com/eklitzke/clang-format-all
Sous Windows, je l'ai utilisé avec succès dans Git Bash et WSL.
la source
Pour les utilisateurs de Windows: Si vous avez la prise en charge de Powershell 3.0, vous pouvez faire:
Remarque 1: utilisez
pushd .
etpopd
si vous souhaitez avoir le même répertoire courant avant et après le scriptRemarque 2: Le script fonctionne dans le répertoire de travail actuel
Note 3: Cela peut probablement être écrit sur une seule ligne si cela était vraiment important pour vous
la source
J'utilise la commande suivante pour formater tous les fichiers objective-C sous le dossier actuel de manière récursive :
$ find . -name "*.m" -o -name "*.h" | sed 's| |\\ |g' | xargs clang-format -i
J'ai défini l'alias suivant dans mon
.bash_profile
pour faciliter les choses:# 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"
la source
Voici une solution qui recherche récursivement et dirige tous les fichiers au format clang sous forme de liste de fichiers en une seule commande. Il exclut également le répertoire "build" (j'utilise CMake), mais vous pouvez simplement omettre l'étape "grep" pour le supprimer.
shopt -s globstar extglob failglob && ls **/*.@(h|hpp|hxx|c|cpp|cxx) | grep -v build | tr '\n' ' ' | xargs clang-format -i
la source
Dans bash moderne, vous pouvez explorer de manière récursive l'arborescence des fichiers
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
Ici, la source est supposée se trouver dans
./src
et.clang-format
contient les informations de formatage.la source