7
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

CMakeでビルドしているコードにclang-tidyを実行する

Posted at

clang-tidyはC++向けの良い感じに自動修正までしてくれるLinterです。
Linterとしてどのくらい良い感じなのかは冬休み到来! clang-tidy で安心安全な C/C++ コーディングを極めよう! - Qiitaを確認していただくとして、ここではCMakeを使って簡単に実行する手順をメモしておきます。

確認した環境

Ubuntu16.04(をVirtualBoxで動かしたもの)
未確認ですが新しめのUbuntuだとCMakeの更新が省けるはず。

準備

以下が必要か不要か忘れたけども、もしかしたら必要。

clang,clang-tidyインストール
sudo apt install clang clang-tidy

CMakeの更新(3.6以上にする)

cmake3.6以降であれば、cmake自身がclang-tidyに対応しているので簡単に導入できる。
最新のcmakeを持ってくる(tar.gz)
https://cmake.org/download/

例えば、下記のようにごちゃごちゃやるとできる。

CMakeをダウンロードしてからパスを通す
mkdir ~/temp
cd ~/temp
wget https://cmake.org/files/v3.8/cmake-3.8.2-Linux-x86_64.tar.gz
tar -xvzf cmake-3.8.2-Linux-x86_64.tar.gz
sudo mv cmake-3.8.2-Linux-x86_64 /opt/
sudo ln -s /opt/cmake-3.8.2-Linux-x86_64/bin/cmake /usr/local/bin/cmake
cmake --version
# cmake version 3.8.2と表示されればOK!

参考:c++ - How to install latest cmake version in Linux/Ubuntu from command line? - Ask Ubuntu

CMakeを使ってclang-tidyする

-DCMAKE_CXX_CLANG_TIDYを使ってなんか適当にやればうまくいく。

環境の例

Direcroty構成
.
└── Qiita
    ├── CMakeLists.txt
    └── main.cpp
Qiita/CMakeLists.txt
cmake_minimum_required(VERSION 3.5)

set(CMAKE_CXX_FLAGS "-std=c++14")

set(SOURCE_FILES
    ${CMAKE_CURRENT_SOURCE_DIR}/main.cpp
    )

add_executable(Hello ${SOURCE_FILES})
Qiita/main.cpp
#include <iostream>

int main(){
    std::cout << "Hello World!" << std::endl;

    float f = 0.0F;
    int i = (int)f;
    std::cout << i << std::endl;
}

ビルド

clang-tidyつきのビルドする
mkdir build
cd build
cmake -DCMAKE_CXX_CLANG_TIDY="clang-tidy;-checks=-*,google-readability-casting;-fix;-fix-errors;-header-filter=/home/yoyomion/Qiita" ../Qiita
make
参考:普通にビルド
mkdir build
cd build
cmake ../Qiita
make

確認

開いてみると、指摘された箇所が自動で修正されています。
C++スタイルのキャストになっています。

Qiita/main.cpp(clang-tidy実行後)
#include <iostream>

int main(){
    std::cout << "Hello World!" << std::endl;

    float f = 0.0F;
    int i = static_cast<int>(f);
    std::cout << i << std::endl;
}

説明

先頭にclang-tidy実行コマンドを書いて、以降はセミコロン区切りでclang-tidy向けのオプションを並べます。

書いてあること 説明
clang-tidy clang-tidy実行コマンド。cmake用。
-checks=-*,google-readability-casting clang-tidyのオプション。今回は、-*で全部のチェッカーを無効にしてから、google-readability-castingチェッカーを指定している。
-fix clang-tidyのオプション。修正提案を自動適用する。
-fix-errors clang-tidyのオプション。ビルドエラーになったとしても修正提案を適用する。
-header-filter=/home/yoyomion/Qiita clang-tidyのオプション。ユーザーが用意したヘッダーファイル置き場を絶対パス指定する。このディレクトリ以下のヘッダーはシステムヘッダーとみなされず、clang-tidyで指摘してもらえる。

参考:
Clang-Tidy — Extra Clang Tools 5 documentation
[cmake-developers] Integration of clang-tidy

7
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?