How to call clang-format over a cpp project folder?

流过昼夜 提交于 2019-12-04 07:35:03

问题


Is there a way to call something like clang-format --style=Webkit for an entire cpp project folder, rather than running it separately for each file?

I am using clang-format.py and vim to do this, but I assume there is a way to apply this once.


回答1:


What about:

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

in the project folder. The -i option makes it inplace (by default formatted output is written to stdout).




回答2:


Unfortunately, there is no way to apply clang-format recursively. *.cpp will only match files in the current directory, not subdirectories. Even **/* doesn't work.

Luckily, there is a solution: grab all the file names with the find command and pipe them in. For example, if you want to format all .h and .cpp files in the directory foo/bar/ recursively, you can do

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

See here for additional discussion.




回答3:


First create a .clang-format file if it doesn't exist:

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

Choose whichever predefined style you like, or edit the resulting .clang-format file.

Then run:

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

Other file extensions than cpp, hpp, cc and cxx can be used in the regular expression, just make sure to separate them with \|.




回答4:


I recently found a bash-script which does exactly what you need:

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

This is a bash script that will run clang-format -i on your code.

Features:

  • Finds the right path to clang-format on Ubuntu/Debian, which encode the LLVM version in the clang-format filename
  • Fixes files recursively
  • Detects the most common file extensions used by C/C++ projects

On Windows, I used it successfully in Git Bash and WSL.




回答5:


For the Windows users: If you have Powershell 3.0 support, you can do:

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

Note1: Use pushd . and popd if you want to have the same current directory before and after the script

Note2: The script operates in the current working directory

Note3: This can probably be written in a single line if that was really important to you




回答6:


I'm using the following command to format all objective-C files under the current folder recursively:

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

I've defined the following alias in my .bash_profile to make things easier:

# 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"


来源:https://stackoverflow.com/questions/28896909/how-to-call-clang-format-over-a-cpp-project-folder

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!