web-dev-qa-db-fra.com

Comment appeler le format clang sur un dossier de projet cpp?

Est-il possible d'appeler quelque chose comme clang-format --style=Webkit pour un dossier de projet cpp complet, 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 ya un moyen de l’appliquer une fois.

56
user3639557

Qu'en est-il de:

clang-format -i -style=WebKit *.cpp *.h

dans le dossier du projet. L'option -i le rend in-situ (par défaut, la sortie formatée est écrite sur stdout).

27
sbarzowski

Malheureusement, il n'y a aucun moyen d'appliquer récursivement le format clang. *.cpp ne fera correspondre que les fichiers du répertoire en cours, pas les sous-répertoires. Même **/* ne fonctionne pas.

Heureusement, il existe une solution: saisissez tous les noms de fichiers à l'aide de la commande find et dirigez-les vers l'intérieur. Par exemple, si vous souhaitez formater tous les .h et .cpp fichiers dans le répertoire foo/bar/ récursivement, vous pouvez faire

find foo/bar/ -iname *.h -o -iname *.cpp | xargs clang-format -i

Voir ici pour une discussion supplémentaire.

59
Antimony

Créez d'abord un .clang-format fichier s'il n'existe pas:

clang-format -style=WebKit -dump-config > .clang-format

Choisissez le style prédéfini que vous préférez ou modifiez le résultat .clang-format fichier.

Puis lancez:

find . -regex '.*\.\(cpp\|hpp\|cc\|cxx\)' -exec clang-format -style=file -i {} \;

D'autres extensions de fichier que cpp, hpp, cc et cxx peuvent être utilisées dans l'expression régulière. Veillez simplement à les séparer par \|.

12
Alexander

J'ai récemment trouvé un script bash qui fait exactement ce dont vous avez besoin:

https://github.com/eklitzke/clang-format-all

Ceci est un script bash qui exécutera clang-format -i sur votre code.

Fonctionnalités:

  • Trouve le bon chemin pour clang-format sur Ubuntu/Debian, qui code la version de LLVM dans le fichier clang-format nom de fichier
  • Corrige les fichiers de manière récursive
  • Détecte les extensions de fichiers les plus courantes utilisées par les projets C/C++

Sous Windows, je l'ai utilisé avec succès dans Git Bash et WSL.

7
Julius Bullinger

Pour les utilisateurs Windows: Si vous avez le support de Powershell 3.0, vous pouvez faire:

Get-ChildItem -Path . -Directory -Recurse |
    foreach {
        cd $_.FullName
        &clang-format -i -style=WebKit *.cpp
    }

Note1: Utilisez pushd . et popd si vous voulez avoir le même répertoire actuel avant et après le script

Note2: Le script fonctionne dans le répertoire de travail actuel

Note3: Ceci peut probablement être écrit en une seule ligne si c'était vraiment important pour vous

1
Tim Meyer

J'utilise la commande suivante pour formater tous les fichiers de objective-C dans le dossier actuel récursivement:

$ 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"
0
marcelosalloum