¿Hay alguna manera de llamar a algo 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.
c++
clang
clang-format
usuario3639557
fuente
fuente
clang-format-3.6 -i -style=file *.cpp *.h *.hpp
**
construcción.clang-tidy
?*.cpp
para generar una lista de archivos debería funcionar. Elclang-tidy
comando permite pasar varios archivos. `USO: clang-tidy [opciones] <source0> [... <sourceN>]` Sin embargo, en la práctica puede que no sea la mejor manera. Clang-tidy realiza un análisis mucho más profundo, por lo que requiere las banderas del compilador para cada archivo, etc. Cuando usé clang-tidy, usualmente tenía una "base de datos de compilación": un archivo JSON con los comandos para cada archivo y algún script que fue encima de eso. Fue hace un par de años, tal vez ahora haya una mejor manera.Desafortunadamente, no hay forma de aplicar el formato clang de forma recursiva.
*.cpp
solo coincidirá con los archivos del directorio actual, no con los subdirectorios. Incluso**/*
no funciona.Afortunadamente, hay una solución: tome todos los nombres de archivo con el
find
comando y canalícelos. Por ejemplo, si desea formatear todos los archivos.h
y.cpp
en el directorio de formafoo/bar/
recursiva, puede hacerloVea aquí para una discusión adicional.
fuente
**/*.cpp
parece funcionar en bash (razonablemente moderno). Es posible que lo necesiteshopt -s globstar
antes.GLOB_RECURSE
para encontrar todos los.cpp
archivos y pasarlos aclang-format
.find
yxargs
debe usarfind ... -print0
yxargs -0 ...
para garantizar que todos los tipos de nombres de archivo se manejen correctamente.find foo/bar/ -iname '*.h' -o -iname '*.cpp' | xargs clang-format -i
solucionará el problema.Primero cree un
.clang-format
archivo si no existe:Elija el estilo predefinido que desee o edite el
.clang-format
archivo resultante .El configurador de formato clang es útil.
Entonces corre:
find . -regex '.*\.\(cpp\|hpp\|cc\|cxx\)' -exec clang-format -style=file -i {} \;
Otras extensiones de archivo que
cpp
,hpp
,cc
ycxx
pueden ser utilizados en la expresión regular, sólo asegúrese de separarlos con\|
.fuente
-style=file
hay una manera para especificar una ruta de archivo personalizado? Lo intenté-style=~/.clang-format
y no funciona.cp ~/.clang-format .
luego el comando de búsqueda en su respuesta.Recientemente encontré un script bash que hace exactamente lo que necesitas:
https://github.com/eklitzke/clang-format-all
En Windows, lo usé con éxito en Git Bash y WSL.
fuente
Para los usuarios de Windows: si tiene soporte para Powershell 3.0, puede hacer:
Note1: Use
pushd .
ypopd
si desea tener el mismo directorio actual antes y después del scriptNota 2: el script opera en el directorio de trabajo actual
Nota 3: esto probablemente se pueda escribir en una sola línea si eso fue realmente importante para usted
fuente
Estoy usando el siguiente comando para formatear todos los archivos de objetivo-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"
fuente
Aquí hay una solución que busca de forma recursiva y canaliza todos los archivos al formato clang como una lista de archivos en un solo comando. También excluye el directorio "build" (yo uso CMake), pero puede omitir el paso "grep" para eliminarlo.
shopt -s globstar extglob failglob && ls **/*.@(h|hpp|hxx|c|cpp|cxx) | grep -v build | tr '\n' ' ' | xargs clang-format -i
fuente