Есть ли способ вызвать что-то вроде clang-format --style=Webkit
для всей папки проекта cpp, а не запускать ее отдельно для каждого файла?
Я использую clang-format.py
и vim
для этого, но полагаю, что есть способ применить это один раз.
c++
clang
clang-format
user3639557
источник
источник
clang-format-3.6 -i -style=file *.cpp *.h *.hpp
**
конструкцию.clang-tidy
?*.cpp
для создания списка файлов должно работать. Командаclang-tidy
позволяет передавать несколько файлов. `USAGE: clang-tidy [options] <source0> [... <sourceN>]` Однако на практике это может быть не лучшим способом. Clang-tidy выполняет гораздо более глубокий анализ, поэтому для него требуются флаги компилятора для каждого файла и т. Д. Когда я использовал clang-tidy, у меня обычно была «база данных компиляции» - файл JSON с командами для каждого файла и некоторый сценарий, который пошел над ним. Это было пару лет назад, может быть, есть способ получше.К сожалению, рекурсивно применить формат clang невозможно.
*.cpp
будет соответствовать только файлам в текущем каталоге, но не подкаталогам. Даже**/*
не работает.К счастью, есть решение: захватить с помощью
find
команды все имена файлов и передать их по конвейеру. Например, если вы хотите рекурсивно форматировать все файлы.h
и.cpp
файлы в каталогеfoo/bar/
, вы можете сделатьСм. Здесь для дополнительного обсуждения.
источник
**/*.cpp
похоже, работает в (достаточно современном) bash. Возможно, вам придется это сделатьshopt -s globstar
раньше.GLOB_RECURSE
найти все.cpp
файлы и передать ихclang-format
.find
иxargs
должна использоватьfind ... -print0
иxargs -0 ...
для обеспечения правильной обработки всех типов имен файлов.find foo/bar/ -iname '*.h' -o -iname '*.cpp' | xargs clang-format -i
устранит проблему.Сначала создайте
.clang-format
файл, если он не существует:Выберите любой предопределенный стиль или отредактируйте полученный
.clang-format
файл.Конфигуратор clang-формата полезен.
Затем запустите:
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-скрипт, который делает именно то, что вам нужно:
https://github.com/eklitzke/clang-format-all
В Windows я успешно использовал его в Git Bash и WSL.
источник
Для пользователей Windows: если у вас есть поддержка Powershell 3.0, вы можете:
Примечание 1: используйте
pushd .
и,popd
если вы хотите иметь один и тот же текущий каталог до и после скрипта.Примечание 2: сценарий работает в текущем рабочем каталоге.
Примечание 3: это, вероятно, можно записать в одну строку, если это было действительно важно для вас
источник
Я использую следующую команду для рекурсивного форматирования всех файлов objective-C в текущей папке :
$ find . -name "*.m" -o -name "*.h" | sed 's| |\\ |g' | xargs clang-format -i
.bash_profile
Чтобы упростить задачу, я определил в my следующий псевдоним :# 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 в виде списка файлов одной командой. Он также исключает каталог «build» (я использую CMake), но вы можете просто опустить шаг «grep», чтобы удалить его.
shopt -s globstar extglob failglob && ls **/*.@(h|hpp|hxx|c|cpp|cxx) | grep -v build | tr '\n' ' ' | xargs clang-format -i
источник
В современном bash вы можете рекурсивно сканировать дерево файлов
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
Здесь предполагается, что источник находится в,
./src
и.clang-format
содержит информацию о форматировании.источник