追加の Python スクリプトを必要としない別の方法を提案できます。
まず、カスタム CMake ルールにclang-tidy
andを統合したかったので、最初にプロジェクトのルート ディレクトリにあるandファイルを生成しました。clang-format
.clang-tidy
.clang-format
構成ファイルの生成
を生成するには.clang-tidy
、まずプロジェクトに適したオプションを見つけてから、次のようにします。
$> clang-tidy <source-files> -dump-config <tidy-options> -- <compile-options> > .clang-tidy
同様にclang-format
、オプションを使用してデフォルトのスタイルから始めて、-style=xxx
それをダンプすることもできます。たとえば、LLVM スタイルから始めます。
$> clang-format -style=LLVM -dump-config > .clang-format
次に、それを編集して、必要に応じて適切に構成します。次のようになります。
---
Language: Cpp
# BasedOnStyle: LLVM
AccessModifierOffset: -2
AlignAfterOpenBracket: true
AlignEscapedNewlinesLeft: false
AlignOperands: true
AlignTrailingComments: true
AllowAllParametersOfDeclarationOnNextLine: true
AllowShortBlocksOnASingleLine: false
AllowShortCaseLabelsOnASingleLine: false
AllowShortIfStatementsOnASingleLine: false
AllowShortLoopsOnASingleLine: false
AllowShortFunctionsOnASingleLine: All
AlwaysBreakAfterDefinitionReturnType: false
AlwaysBreakTemplateDeclarations: false
AlwaysBreakBeforeMultilineStrings: false
BreakBeforeBinaryOperators: None
BreakBeforeTernaryOperators: true
BreakConstructorInitializersBeforeComma: false
BinPackParameters: true
BinPackArguments: true
ColumnLimit: 80
ConstructorInitializerAllOnOneLineOrOnePerLine: false
ConstructorInitializerIndentWidth: 4
DerivePointerAlignment: false
ExperimentalAutoDetectBinPacking: false
IndentCaseLabels: false
IndentWrappedFunctionNames: false
IndentFunctionDeclarationAfterType: false
MaxEmptyLinesToKeep: 1
KeepEmptyLinesAtTheStartOfBlocks: true
NamespaceIndentation: None
ObjCBlockIndentWidth: 2
ObjCSpaceAfterProperty: false
ObjCSpaceBeforeProtocolList: true
PenaltyBreakBeforeFirstCallParameter: 19
PenaltyBreakComment: 300
PenaltyBreakString: 1000
PenaltyBreakFirstLessLess: 120
PenaltyExcessCharacter: 1000000
PenaltyReturnTypeOnItsOwnLine: 60
PointerAlignment: Right
SpacesBeforeTrailingComments: 1
Cpp11BracedListStyle: true
Standard: Cpp11
IndentWidth: 2
TabWidth: 8
UseTab: Never
BreakBeforeBraces: Attach
SpacesInParentheses: false
SpacesInSquareBrackets: false
SpacesInAngles: false
SpaceInEmptyParentheses: false
SpacesInCStyleCastParentheses: false
SpaceAfterCStyleCast: false
SpacesInContainerLiterals: true
SpaceBeforeAssignmentOperators: true
ContinuationIndentWidth: 4
CommentPragmas: '^ IWYU pragma:'
ForEachMacros: [ foreach, Q_FOREACH, BOOST_FOREACH ]
SpaceBeforeParens: ControlStatements
DisableFormat: false
...
カスタム CMake ルールの作成
CMake では、非常に簡単な方法でカスタム ルールを定義できます。手順を呼び出す一連の CMake コマンドをファイルに記述し、add_custom_target()
それをCMakeList.txt
ファイルに含めるだけです。cmake/clang-dev-tools.cmake
まず、プロジェクトのルートにファイルを作成します。
# Additional target to perform clang-format/clang-tidy run
# Requires clang-format and clang-tidy
# Get all project files
file(GLOB_RECURSE ALL_SOURCE_FILES *.cpp *.hpp)
add_custom_target(
clang-format
COMMAND /usr/bin/clang-format
-style=file
-i
${ALL_SOURCE_FILES}
)
add_custom_target(
clang-tidy
COMMAND /usr/bin/clang-tidy
${ALL_SOURCE_FILES}
-config=''
--
-std=c++11
${INCLUDE_DIRECTORIES}
)
次に、あなたを編集してCMakeLists.txt
追加します。
# Including extra cmake rules
include(cmake/clang-dev-tools.cmake)
次に、ビルド システムが再生成されると、実行できるようにmake clang-tidy
なりmake clang-format
ます。