Existe uma maneira de chamar algo como clang-format --style=Webkit
para uma pasta de projeto cpp inteira, em vez de executá-lo separadamente para cada arquivo?
Estou usando clang-format.py
e vim
para fazer isso, mas presumo que haja uma maneira de aplicar isso uma vez.
c++
clang
clang-format
usuário 3639557
fonte
fonte
clang-format-3.6 -i -style=file *.cpp *.h *.hpp
**
construção.clang-tidy
?*.cpp
para gerar uma lista de arquivos deve funcionar. Oclang-tidy
comando permite a passagem de vários arquivos. `USO: clang-tidy [options] <source0> [... <sourceN>]` Na prática, pode não ser a melhor maneira. O Clang-tidy realiza uma análise muito mais profunda, por isso requer os sinalizadores do compilador para cada arquivo etc. Quando eu usava o clang-tidy, geralmente tinha um "banco de dados de compilação" - um arquivo JSON com os comandos para cada arquivo e algum script que foi acima dele. Foi há alguns anos, talvez haja uma maneira melhor agora.Infelizmente, não há como aplicar o formato clang recursivamente.
*.cpp
corresponderá apenas aos arquivos do diretório atual, não aos subdiretórios. Mesmo**/*
não funciona.Felizmente, há uma solução: pegar todos os nomes de arquivos com o
find
comando e da tubulação-los em Por exemplo, se você deseja formatar todos..h
E.cpp
arquivos no diretóriofoo/bar/
de forma recursiva, você pode fazerVeja aqui uma discussão adicional.
fonte
**/*.cpp
parece funcionar em bash (razoavelmente moderno). Você pode precisarshopt -s globstar
antes.GLOB_RECURSE
para encontrar todos os.cpp
arquivos e passá-los paraclang-format
.find
exargs
deve usarfind ... -print0
exargs -0 ...
para garantir que todos os tipos de nomes de arquivo sejam tratados corretamente.find foo/bar/ -iname '*.h' -o -iname '*.cpp' | xargs clang-format -i
vai resolver o problema.Primeiro crie um
.clang-format
arquivo se ele não existir:Escolha o estilo predefinido de sua preferência ou edite o
.clang-format
arquivo resultante .configurador de formato clang é útil.
Então corra:
find . -regex '.*\.\(cpp\|hpp\|cc\|cxx\)' -exec clang-format -style=file -i {} \;
Outras extensões de arquivo que
cpp
,hpp
,cc
ecxx
podem ser usados na expressão regular, apenas certifique-se de separá-los com\|
.fonte
-style=file
se existe uma maneira para especificar um caminho de arquivo de costume? Eu tentei-style=~/.clang-format
e não deu certo.cp ~/.clang-format .
o comando find em sua resposta.Recentemente, encontrei um script bash que faz exatamente o que você precisa:
https://github.com/eklitzke/clang-format-all
No Windows, usei-o com sucesso no Git Bash e WSL.
fonte
Para usuários do Windows: Se você tiver suporte para Powershell 3.0, você pode fazer:
Nota 1: Use
pushd .
epopd
se quiser ter o mesmo diretório atual antes e depois do scriptNota 2: o script opera no diretório de trabalho atual
Nota 3: Isso provavelmente pode ser escrito em uma única linha se isso for realmente importante para você
fonte
Estou usando o seguinte comando para formatar todos os arquivos Objectivo-C na pasta atual recursivamente :
$ find . -name "*.m" -o -name "*.h" | sed 's| |\\ |g' | xargs clang-format -i
Eu defini o seguinte alias no meu
.bash_profile
para facilitar as coisas:# 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"
fonte
Aqui está uma solução que pesquisa recursivamente e canaliza todos os arquivos para o formato clang como uma lista de arquivos em um comando. Também exclui o diretório "build" (eu uso o CMake), mas você pode simplesmente omitir o passo "grep" para removê-lo.
shopt -s globstar extglob failglob && ls **/*.@(h|hpp|hxx|c|cpp|cxx) | grep -v build | tr '\n' ' ' | xargs clang-format -i
fonte