Apakah ada cara untuk memanggil sesuatu seperti clang-format --style=Webkit
untuk seluruh folder proyek cpp, daripada menjalankannya secara terpisah untuk setiap file?
Saya menggunakan clang-format.py
dan vim
melakukan ini, tetapi saya menganggap ada cara untuk menerapkan ini sekali.
c++
clang
clang-format
pengguna3639557
sumber
sumber
clang-format-3.6 -i -style=file *.cpp *.h *.hpp
**
konstruksi.clang-tidy
?*.cpp
untuk menghasilkan daftar file harus bekerja. Theclang-tidy
perintah memungkinkan melewati beberapa file. `PENGGUNAAN: clang-tidy [options] <source0> [... <sourceN>]` Dalam praktiknya, itu mungkin bukan cara terbaik. Clang-tidy melakukan analisis yang jauh lebih dalam, sehingga memerlukan flag compiler untuk setiap file, dll. Saat saya menggunakan clang-tidy, saya biasanya memiliki "database kompilasi" - file JSON dengan perintah untuk setiap file dan beberapa skrip yang digunakan lebih dari itu. Beberapa tahun yang lalu, mungkin ada cara yang lebih baik sekarang.Sayangnya, tidak ada cara untuk menerapkan format-clang secara rekursif.
*.cpp
hanya akan mencocokkan file di direktori saat ini, bukan subdirektori. Bahkan**/*
tidak berhasil.Untungnya, ada solusi: ambil semua nama file dengan
find
perintah dan masukkan nama file tersebut . Misalnya, jika Anda ingin memformat semua.h
dan.cpp
file di direktorifoo/bar/
secara rekursif, Anda dapat melakukannyaLihat di sini untuk diskusi tambahan.
sumber
**/*.cpp
sepertinya bekerja di pesta (yang cukup modern). Anda mungkin perlushopt -s globstar
sebelumnya.GLOB_RECURSE
untuk menemukan semua.cpp
file dan meneruskannyaclang-format
.find
danxargs
harus menggunakanfind ... -print0
danxargs -0 ...
untuk memastikan bahwa semua jenis nama file ditangani dengan benar.find foo/bar/ -iname '*.h' -o -iname '*.cpp' | xargs clang-format -i
akan memperbaiki masalah tersebut.Pertama buat
.clang-format
file jika tidak ada:Pilih gaya standar mana yang Anda suka, atau edit
.clang-format
file yang dihasilkan .Clang-format configurator membantu.
Lalu lari:
find . -regex '.*\.\(cpp\|hpp\|cc\|cxx\)' -exec clang-format -style=file -i {} \;
Ekstensi file selain
cpp
,hpp
,cc
dancxx
dapat digunakan dalam ekspresi reguler, hanya pastikan untuk memisahkan mereka dengan\|
.sumber
-style=file
adakah cara untuk menentukan jalur file kustom? Saya mencoba-style=~/.clang-format
dan tidak berhasil.cp ~/.clang-format .
kemudian perintah find dalam jawaban Anda.Saya baru-baru ini menemukan skrip bash yang melakukan apa yang Anda butuhkan:
https://github.com/eklitzke/clang-format-all
Di Windows, saya berhasil menggunakannya di Git Bash dan WSL.
sumber
Untuk pengguna Windows: Jika Anda memiliki dukungan Powershell 3.0, Anda dapat melakukan:
Note1: Gunakan
pushd .
danpopd
jika Anda ingin memiliki direktori saat ini yang sama sebelum dan sesudah skripNote2: Skrip beroperasi di direktori kerja saat ini
Note3: Ini mungkin dapat ditulis dalam satu baris jika itu benar-benar penting bagi Anda
sumber
Saya menggunakan perintah berikut untuk memformat semua file objektif-C di bawah folder saat ini secara rekursif :
$ find . -name "*.m" -o -name "*.h" | sed 's| |\\ |g' | xargs clang-format -i
Saya telah mendefinisikan alias berikut di my
.bash_profile
untuk mempermudah:# 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"
sumber
Berikut adalah solusi yang mencari secara rekursif dan menyalurkan semua file ke format-clang sebagai daftar file dalam satu perintah. Ini juga mengecualikan direktori "build" (saya menggunakan CMake), tetapi Anda bisa menghilangkan langkah "grep" untuk menghapusnya.
shopt -s globstar extglob failglob && ls **/*.@(h|hpp|hxx|c|cpp|cxx) | grep -v build | tr '\n' ' ' | xargs clang-format -i
sumber
Dalam bash modern, Anda dapat merayapi pohon file secara rekursif
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
Di sini sumber diasumsikan berada di
./src
dan.clang-format
berisi informasi pemformatan.sumber