Linterを追加する
This commit is contained in:
parent
12d5c43c9e
commit
8ca1878481
14
Dockerfile.devtools
Normal file
14
Dockerfile.devtools
Normal file
@ -0,0 +1,14 @@
|
||||
# mus
|
||||
FROM alpine:3.20
|
||||
|
||||
# 必要なツールをインストール
|
||||
RUN apk add --no-cache \
|
||||
doxygen \
|
||||
graphviz \
|
||||
cppcheck \
|
||||
clang-extra-tools # clang-tidy を含む
|
||||
|
||||
# 作業ディレクトリを設定
|
||||
WORKDIR /work
|
||||
|
||||
ENTRYPOINT []
|
||||
@ -1,11 +0,0 @@
|
||||
# mus
|
||||
FROM alpine:3.20
|
||||
|
||||
# 必要なツールをインストール
|
||||
RUN apk add --no-cache \
|
||||
doxygen \
|
||||
graphviz
|
||||
|
||||
WORKDIR /work
|
||||
|
||||
CMD ["doxygen", "Doxyfile"]
|
||||
@ -2,10 +2,15 @@
|
||||
|
||||
- [C/C++の開発環境](#ccの開発環境)
|
||||
- [Linter](#linter)
|
||||
- [導入方法](#導入方法)
|
||||
- [Dockerを活用する](#dockerを活用する)
|
||||
- [Linterの使い方](#linterの使い方)
|
||||
- [clang-tidy の使い方(C++向け)](#clang-tidy-の使い方c向け)
|
||||
- [ccppcheck の使い方(C / C++ 両対応)](#ccppcheck-の使い方c--c-両対応)
|
||||
- [テスト](#テスト)
|
||||
- [Doc(ドキュメンテーション)](#docドキュメンテーション)
|
||||
- [環境構築](#環境構築)
|
||||
- [Dockerを活用する](#dockerを活用する)
|
||||
- [Dockerを活用する](#dockerを活用する-1)
|
||||
- [doxygen 使い方](#doxygen-使い方)
|
||||
- [CI / CDによる実行](#ci--cdによる実行)
|
||||
- [Doxyfileの設定](#doxyfileの設定)
|
||||
@ -14,7 +19,121 @@
|
||||
|
||||
## Linter
|
||||
|
||||
TODO: TBD
|
||||
ライブラリの候補
|
||||
* **clang-tidy**
|
||||
* 精度はかなり高い
|
||||
* C++向け(Cはカバー範囲が狭い)
|
||||
* **cppcheck**
|
||||
* C/C++ 両方対応・軽量
|
||||
* 導入が簡単にできる
|
||||
|
||||
### 導入方法
|
||||
|
||||
**Macの場合**
|
||||
|
||||
```sh
|
||||
brew install cppcheck llvm
|
||||
# パスの追加が必要
|
||||
export PATH="/opt/homebrew/opt/llvm/bin:$PATH"
|
||||
clang-tidy --version
|
||||
cppcheck --version
|
||||
```
|
||||
|
||||
* llvm: clang-tidy は llvm に含まれています
|
||||
|
||||
**Linux(Ubuntu)の場合**
|
||||
|
||||
```sh
|
||||
sudo apt install cppcheck clang-tidy
|
||||
clang-tidy --version
|
||||
cppcheck --version
|
||||
```
|
||||
|
||||
#### Dockerを活用する
|
||||
|
||||
[Dockerfileはこちら](../Dockerfile.devtools)
|
||||
|
||||
Dockerイメージをビルドする
|
||||
|
||||
```sh
|
||||
docker build -f Dockerfile.devtools -t c-dev-tools .
|
||||
```
|
||||
|
||||
```sh
|
||||
# docker run --rm -v "$(pwd)":/work -w /work c-dev-tools <コマンド>
|
||||
```
|
||||
|
||||
### Linterの使い方
|
||||
|
||||
#### clang-tidy の使い方(C++向け)
|
||||
|
||||
**単一ファイルをチェックする例**
|
||||
|
||||
```sh
|
||||
clang-tidy src/cpp/hello.cpp -- -Iinclude -std=c++17
|
||||
# Docker
|
||||
docker run --rm -v "$(pwd)":/work -w /work clang-tidy src/cpp/hello.cpp -- -Iinclude -std=c++17
|
||||
```
|
||||
|
||||
* `--`以降がコンパイラフラグ(g++に渡すものと同じ)
|
||||
* -Iinclude : ヘッダファイルのパス
|
||||
* -std=c++17 : 使用している C++ のバージョン
|
||||
|
||||
**チェック内容を絞る使い方**
|
||||
|
||||
```sh
|
||||
clang-tidy src/cpp/hello.cpp \
|
||||
-checks='modernize-*,bugprone-*,readability-*' \
|
||||
-- -Iinclude -std=c++17
|
||||
```
|
||||
|
||||
よく使うチェックカテゴリ:
|
||||
* bugprone-* : バグにつながるコード
|
||||
* modernize-* : モダンC++スタイルへの改善提案
|
||||
* readability-* : 可読性の改善
|
||||
|
||||
**プロジェクト全体**
|
||||
|
||||
CMake + compile_commands.jsonがある場合に以下の内容でできます
|
||||
(clang-tidy は「コンパイル情報」がないと正しく解析できない)
|
||||
compile_commands.jsonについては別途解説します。
|
||||
|
||||
```sh
|
||||
mkdir -p build
|
||||
cd build
|
||||
cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ..
|
||||
|
||||
# プロジェクト全体に対して実行
|
||||
run-clang-tidy -p build
|
||||
```
|
||||
|
||||
#### ccppcheck の使い方(C / C++ 両対応)
|
||||
|
||||
cppcheckはコンパイル不要で実行できる静的解析ツールです。
|
||||
CでもC++でも同じコマンドで使えます。
|
||||
|
||||
**基本的な使い方**
|
||||
|
||||
```sh
|
||||
cppcheck src/
|
||||
# Docker
|
||||
docker run --rm -v "$(pwd)":/work -w /work c-dev-tools cppcheck src/
|
||||
```
|
||||
|
||||
**チェックレベルを広げる(おすすめ)**
|
||||
|
||||
```sh
|
||||
cppcheck --enable=warning,style,performance,portability src/
|
||||
# Docker
|
||||
docker run --rm -v "$(pwd)":/work -w /work c-dev-tools \
|
||||
cppcheck --enable=warning,style,performance,portability src/
|
||||
```
|
||||
|
||||
* warning : 危険なコードやバグの可能性
|
||||
* style : コーディングスタイル上の問題
|
||||
* performance : 非効率なコード
|
||||
* portability : 環境依存のコード
|
||||
|
||||
|
||||
## テスト
|
||||
|
||||
@ -47,28 +166,25 @@ sudo apt install doxygen graphviz
|
||||
|
||||
#### Dockerを活用する
|
||||
|
||||
[Dockerfileはこちら](../Dockerfile.doxygen)
|
||||
[Dockerfileはこちら](../Dockerfile.devtools)
|
||||
|
||||
Dockerイメージをビルドする
|
||||
|
||||
```sh
|
||||
docker build -f Dockerfile.doxygen -t dev-doxygen .
|
||||
docker build -f Dockerfile.devtools -t c-dev-tools .
|
||||
```
|
||||
|
||||
Linuxでコマンドを実行する
|
||||
|
||||
|
||||
```sh
|
||||
mkdir -p docs
|
||||
# docker run --rm -v "$(pwd)":/work -w /work/docs dev-doxygen <コマンド>
|
||||
# docker run --rm -v "$(pwd)":/work -w /work/docs c-dev-tools <コマンド>
|
||||
# 初期化コマンド
|
||||
docker run --rm -v "$(pwd)":/work -w /work/docs dev-doxygen doxygen -g
|
||||
docker run --rm -v "$(pwd)":/work -w /work/docs c-dev-tools doxygen -g
|
||||
# ドキュメントを生成する
|
||||
docker run --rm -v "$(pwd)":/work -w /work/docs dev-doxygen doxygen Doxyfile
|
||||
docker run --rm -v "$(pwd)":/work -w /work/docs c-dev-tools doxygen Doxyfile
|
||||
```
|
||||
|
||||
|
||||
|
||||
### doxygen 使い方
|
||||
|
||||
**設定ファイルを生成**
|
||||
|
||||
@ -4,6 +4,10 @@
|
||||
// run: ./dist/hello
|
||||
#include <iostream>
|
||||
|
||||
/**
|
||||
* @brief Main function
|
||||
* @return int Exit status
|
||||
*/
|
||||
int main() {
|
||||
std::cout << "Hello, world!" << std::endl;
|
||||
return 0;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user