web-dev-qa-db-ja.com

cppプロジェクトフォルダーでclang-formatを呼び出す方法は?

ファイルごとに個別に実行するのではなく、cppプロジェクトフォルダ全体に対してclang-format --style=Webkitのようなものを呼び出す方法はありますか?

私はclang-format.pyvimを使用してこれを行っていますが、これを一度適用する方法があると思います。

56
user3639557

どうですか:

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

プロジェクトフォルダ内。 -iオプションは、それをインプレースにします(デフォルトでは、フォーマットされた出力はstdoutに書き込まれます)。

27
sbarzowski

残念ながら、clang-formatを再帰的に適用する方法はありません。 *.cppは、現在のディレクトリ内のファイルにのみ一致し、サブディレクトリには一致しません。 **/*は機能しません。

幸いなことに、解決策があります。すべてのファイル名をfindコマンドで取得し、パイプで接続します。たとえば、すべての.hおよび.cppディレクトリ内のファイルfoo/bar/再帰的に、あなたはできる

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

詳細については、 here を参照してください。

59
Antimony

最初に.clang-formatファイルが存在しない場合は作成します。

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

好みの定義済みスタイルを選択するか、結果の.clang-formatファイルを編集します。

次に実行します:

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

cpphppcc、およびcxx以外のファイル拡張子を正規表現で使用できますが、必ず\|で区切ってください。

12
Alexander

私は最近、あなたが必要とするものを正確に実行するbashスクリプトを見つけました:

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

これは、コードでclang-format -iを実行するbashスクリプトです。

特徴:

  • Ubuntu/Debian上のclang-formatへの正しいパスを見つけます。これはclang-formatファイル名でLLVMバージョンをエンコードします
  • ファイルを再帰的に修正します
  • C/C++プロジェクトで使用される最も一般的なファイル拡張子を検出します

Windowsでは、Git BashとWSLで正常に使用しました。

7

Windowsユーザーの場合:Powershell 3.0をサポートしている場合、次のことができます。

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

注1:スクリプトの前後で同じ現在のディレクトリを使用する場合は、pushd .およびpopdを使用します

注2:スクリプトは現在の作業ディレクトリで動作します

注3:本当に重要な場合は、おそらく1行で記述できます

1
Tim Meyer

次のコマンドを使用して、現在のフォルダー再帰的にの下にあるすべてのObjective-Cファイルをフォーマットしています。

$ find . -name "*.m" -o -name "*.h" | sed 's| |\\ |g' | xargs clang-format -i

.bash_profileで次のエイリアスを定義して、物事を簡単にしました。

# 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