c++ - ¿Cómo llamar a formato clang sobre una carpeta de proyecto cpp?
clang-format (6)
Desafortunadamente, no hay forma de aplicar el formato clang recursivamente.
*.cpp
solo coincidirá con los archivos del directorio actual, no con los subdirectorios.
Incluso
**/*
no funciona.
Afortunadamente, hay una solución: tomar todos los nombres de archivo con el comando
find
y canalizarlos. Por ejemplo, si desea formatear todos los archivos
.h
y
.cpp
en el directorio
foo/bar/
recursivamente, puede hacerlo
find foo/bar/ -iname *.h -o -iname *.cpp | xargs clang-format -i
Ver here para una discusión adicional.
¿Hay alguna manera de llamar a algo así como
clang-format --style=Webkit
para una carpeta de proyecto cpp completa, en lugar de ejecutarlo por separado para cada archivo?
Estoy usando
clang-format.py
y
vim
para hacer esto, pero supongo que hay una manera de aplicar esto una vez.
Estoy usando el siguiente comando para formatear todos los archivos de Objective-C en la carpeta actual de forma recursiva :
$ find . -name "*.m" -o -name "*.h" | sed ''s| |// |g'' | xargs clang-format -i
He definido el siguiente alias en mi
.bash_profile
para facilitar las cosas:
# 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"
Para los usuarios de Windows: si tiene soporte para Powershell 3.0, puede hacer:
Get-ChildItem -Path . -Directory -Recurse |
foreach {
cd $_.FullName
&clang-format -i -style=WebKit *.cpp
}
Nota 1: use
pushd .
y
popd
si desea tener el mismo directorio actual antes y después del script
Nota 2: el script funciona en el directorio de trabajo actual
Nota 3: Esto probablemente se puede escribir en una sola línea si eso fue realmente importante para usted
Primero cree un
.clang-format
si no existe:
clang-format -style=WebKit -dump-config > .clang-format
Elija el estilo predefinido que desee o edite el
.clang-format
resultante
.clang-format
.
Entonces corre:
find . -regex ''.*/./(cpp/|hpp/|cc/|cxx/)'' -exec clang-format -style=file -i {} /;
Se pueden usar otras extensiones de archivo que no sean
cpp
,
hpp
,
cc
y
cxx
en la expresión regular, solo asegúrese de separarlas con
/|
.
Qué pasa:
clang-format -i -style=WebKit *.cpp *.h
en la carpeta del proyecto. La opción -i lo hace in situ (por defecto, la salida formateada se escribe en stdout).
Recientemente encontré un script bash que hace exactamente lo que necesitas:
https://github.com/eklitzke/clang-format-all
Este es un script bash que ejecutará
clang-format -i
en su código.caracteristicas:
- Encuentra la ruta correcta al
clang-format
en Ubuntu / Debian, que codifica la versión LLVM en el nombre de archivo enclang-format
- Corrige archivos de forma recursiva
- Detecta las extensiones de archivo más comunes utilizadas por los proyectos C / C ++
En Windows, lo usé con éxito en Git Bash y WSL.