clang-format --style=Webkit
각 파일에 대해 개별적으로 실행하는 대신 전체 cpp 프로젝트 폴더에 대해 호출하는 방법이 있습니까?
나는 이것을 사용 clang-format.py
하고 vim
있지만 이것을 한 번 적용하는 방법이 있다고 가정합니다.
clang-format --style=Webkit
각 파일에 대해 개별적으로 실행하는 대신 전체 cpp 프로젝트 폴더에 대해 호출하는 방법이 있습니까?
나는 이것을 사용 clang-format.py
하고 vim
있지만 이것을 한 번 적용하는 방법이 있다고 가정합니다.
답변:
는 어때:
clang-format -i -style=WebKit *.cpp *.h
프로젝트 폴더에 있습니다. -i 옵션은 그것을 제자리에 만듭니다 (기본적으로 형식화 된 출력은 stdout에 기록됩니다).
**
.
clang-tidy
?
*.cpp
파일 목록을 생성하는 데 사용할 수 있습니다. 이 clang-tidy
명령을 사용하면 여러 파일을 전달할 수 있습니다. `사용법 : clang-tidy [옵션] <source0> [... <sourceN>]`실제로는 이것이 최선의 방법이 아닐 수도 있습니다. Clang-tidy는 훨씬 더 심층적 인 분석을 수행하므로 각 파일 등에 대한 컴파일러 플래그가 필요합니다. clang-tidy를 사용할 때 일반적으로 "컴파일 데이터베이스"가있었습니다. 각 파일에 대한 명령이있는 JSON 파일과 몇 가지 스크립트 그 위에. 몇 년 전이었는데 지금은 더 좋은 방법이있을 수 있습니다.
불행히도 clang-format을 재귀 적으로 적용하는 방법은 없습니다. *.cpp
하위 디렉터리가 아닌 현재 디렉터리의 파일 만 일치합니다. 심지어 **/*
작동하지 않습니다.
다행히도 해결책이 있습니다. find
명령으로 모든 파일 이름을 가져 와서 파이프합니다. 예를 들어 디렉토리의 모든 파일 .h
과 .cpp
파일을 foo/bar/
재귀 적 으로 형식화 하려면 다음을 수행 할 수 있습니다.
find foo/bar/ -iname *.h -o -iname *.cpp | xargs clang-format -i
**/*.cpp
(합리적으로 현대적인) bash에서 작동하는 것 같습니다. shopt -s globstar
이전에 필요할 수도 있습니다 .
find
및 xargs
이용해야 find ... -print0
하고 xargs -0 ...
파일 이름의 모든 유형이 올바르게 처리되었는지 확인.
find foo/bar/ -iname '*.h' -o -iname '*.cpp' | xargs clang-format -i
문제를 해결할 것입니다.
.clang-format
파일이없는 경우 먼저 파일을 만듭니다 .
clang-format -style=WebKit -dump-config > .clang-format
원하는 미리 정의 된 스타일을 선택하거나 결과 .clang-format
파일을 편집 합니다.
clang-format configurator 가 도움이됩니다.
그런 다음 다음을 실행하십시오.
find . -regex '.*\.\(cpp\|hpp\|cc\|cxx\)' -exec clang-format -style=file -i {} \;
이외의 파일 확장자 cpp
, hpp
, cc
및 cxx
정규 표현식에서 사용할 수있는, 그냥 확인으로 구분 할 수 있도록 \|
.
-style=file
사용자 정의 파일의 경로를 지정하는 방법은 무엇입니까? 나는 시도했지만 -style=~/.clang-format
작동하지 않습니다.
cp ~/.clang-format .
만든 다음 답변에서 find 명령을 실행 하는 것입니다.
최근에 필요한 것을 정확히 수행하는 bash-script를 발견했습니다.
https://github.com/eklitzke/clang-format-all
이것은
clang-format -i
코드에서 실행되는 bash 스크립트입니다 .풍모:
- 파일 이름에
clang-format
LLVM 버전을 인코딩하는 Ubuntu / Debian 에서 올바른 경로를 찾습니다.clang-format
- 재귀 적으로 파일 수정
- C / C ++ 프로젝트에서 사용하는 가장 일반적인 파일 확장자를 감지합니다.
Windows에서는 Git Bash 및 WSL에서 성공적으로 사용했습니다.
Windows 사용자의 경우 : Powershell 3.0을 지원하는 경우 다음을 수행 할 수 있습니다.
Get-ChildItem -Path . -Directory -Recurse |
foreach {
cd $_.FullName
&clang-format -i -style=WebKit *.cpp
}
참고 1 : 스크립트 전후에 동일한 현재 디렉토리를 사용하려면 pushd .
and를 사용하십시오.popd
참고 2 : 스크립트는 현재 작업 디렉토리에서 작동합니다.
Note3 : 이것이 당신에게 정말로 중요하다면 아마 한 줄로 쓸 수 있습니다.
다음 명령을 사용하여 현재 폴더 아래의 모든 목표 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"
clang-format-3.6 -i -style=file *.cpp *.h *.hpp