clang+llvm のインストール
必要なパッケージのインストール
build-essential
等の基本的なパッケージはインストール済みとします。
apt-get install -y libpython2.7 libpython2.7-dev swig libedit2 libedit-dev libncurses5-dev libxml2-dev
インストールしたのは以下のパッケージです。
パッケージ名 | 概要 |
---|---|
libpython2.7 | |
libpython2.7-dev | libpython2.7 の開発者向けパッケージ |
swig | C/C++とスクリプト言語のグルーライブラリ |
libedit2 | |
libedit-dev | libedit2 の開発者向けパッケージ |
libncurses5-dev | libncurses5 の開発者向けパッケージ |
libxml2-dev | libxml2 の開発者向けパッケージ |
足りないものは、適宜導入して下さい。
ソースの取得
cd path/to/workspace svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm cd llvm/tools svn co http://llvm.org/svn/llvm-project/cfe/trunk clang svn co http://llvm.org/svn/llvm-project/lldb/trunk lldb svn co http://llvm.org/svn/llvm-project/lld/trunk lld cd ../projects svn co http://llvm.org/svn/llvm-project/test-suite/trunk test-suite svn co http://llvm.org/svn/llvm-project/compiler-rt/trunk compiler-rt
Makefile の生成
今、 cmake
に取り組んでいるので、 cmake
を使ってMakefileを生成します。
その他、 ./configure
でも生成できます。
cd path/to/workspace/llvm mkdir build cd build cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/opt/toolchain/clang+llvm ..
コンパイル
cd path/to/workspace/llvm/build make -j2 make check-all
途中、 lldb
のコンパイルでエラーが発生したが、再度コンパイルしたら通った。。。理由はわからず。
Program error: Invalid parameters entered, -h for help.
cmakeのインストール
すごく便利との評判はあるが、使い方がよくわからない cmake
について、とりあえずインストールをしてみます。
まず、日々更新されているため、できるだけ新しい機能を使いたいので、パッケージではなく、公式から直接導入します。
curl -R -O http://www.cmake.org/files/v3.1/cmake-3.1.1-Linux-x86_64.sh sudo sh cmake-3.1.1-Linux-x86_64.sh --prefix=/opt/toolchain
以下の2つの質問をされますが、どちらもagreeしておきます。
Do you accept the license? [yN]: #ライセンスを了承しますか?
y
と
Do you want to include the subdirectory cmake-3.1.1-Linux-x86_64?
Saying no will install in: "/opt/toolchain" [Yn]: # サブディレクトリを作りますか?
y
あとは、パスを通せば実行できます。
$ export PATH=/opt/toolchain/cmake-3.1.1-Linux-x86_64/bin/:$PATH $ cmake --version cmake version 3.1.1 CMake suite maintained and supported by Kitware (kitware.com/cmake).
引き続き、使い方も調べていこうと思います。
映画:グラン・トリノ
戦争を生き抜いた頑固親父が
人生の終わりを悟ったときに
新しく若い友のために命を使うと決めた
そんな話でした。
コードの品質を自動的に評価するために 続編1
を書いてから、見つけた試してみたいツールをメモしておく。
- terryyin/lizard · GitHub lizard というPythonで組まれた複雑度計測ツールらしい。 個人開発だが、比較的頻繁にコミットされているので、試してみるのはいいかも。 なにより、Pythonというのがテンション上がる(笑)
- Valgrind Home こちらは古くから知っているメモリデバッガだったが、最近はいろいろ機能が追加されているらしい。 複雑度は関係ないが、動的デバッガは珍しいので、有効ならCIに組み込みた。
コードの品質を自動的に評価するために
コーディングにおける、現場の課題としては、おそらくここ数十年変わっていないと思うのですが、コードの品質をどのように担保するのかということになると思っています。
ここでいうコードの品質とは、動作上の確かさではなく、コード自体の保守性などのことです。
私の職場では、
- コードレビュー
- 静的解析
を行っていますが、実際には、
といった問題があります。
静的解析ツールは商用なんですけれどもね。。。
ただ、現在使用している静的解析ツールは複雑度などの「人の見易さ」については評価してくれないため、その点を安易に導入する手段を探してみました。
複雑度が下がれば、コードレビューにおける問題点もある程度緩和できると思うので。(または、重点的にレビューすべき箇所が自動的に特定される)
とりあえず、ぱっと見つかったのは、 SourceMonitor V3.5 なのですが、これはWindows用だったことと、以前、超巨大プロジェクトに対して実施したときに一部コードが正しく評価されていなかったっぽいため、評価対象外にしたい。
CIに組み込むことも考慮して、Linux上で動作するもの限定で探すと、
なんてものが見つかったけど、更新が1年以上止まっている。。。
もしかして、世界的には複雑度によるコードの評価はあまり有効と考えられていないのか??
それとも、「都度しっかり見ていれば、複雑度なんて上がらねーよ!!」ということなのだろうか?
プログラマが知るべき97のこと
O'Reilly の書籍で、 O'Reilly Japan - プログラマが知るべき97のこと というものがあり、職業柄読んでみたかったのですが、知らないうちにWebでみられるようになっているらしい。
公式ではないようだけど、各エッセイがCCライセンスだったため、公開しても問題がないという解釈なのだけどよいのかな?
いきなり、最初の 分別のある行動 から今の仕事の状態にピッタリな内容でびっくり(笑)
プログラマの成果(≒コード)は他の職業より、作業者の考え方が品質に与える影響が大きいと思うので、まず新人には読んでもらいたい内容だな。
おそらく、その時はぴんと来ないけど、3年後に読み返せば大きな共感が得られると思う。
vim の初期設定
毎回調べるので、vim の初期設定についてのメモを残しておく。
NeoBundle のダウンロード
mkdir -p ~/.vim/bundle git clone git://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim
NeoBundle のインストール
vim ~/.vimrc
set nocompatible filetype plugin indent off if has('vim_starting') set rtp+=$HOME/.vim/bundle/neobundle.vim/ endif call neobundle#begin(expand('~/.vim/bundle')) NeoBundleFetch 'Shougo/neobundle.vim' call neobundle#end() " NeoBundle のプラグインを記述していく NeoBundle 'Shougo/neocomplcache.git' NeoBundle 'Shougo/unite.vim.git' filetype plugin indent on
あとは、 vim を起動して以下のコマンドを実行すればインストール・アップデートが出来る。
:NeoBundleInstall
:NeoBundleUpdate
インストールするプラグイン
とりあえず、以下のプラグインを導入しておく。
molokai カラースキーム
NeoBundle 'tomasr/molokai'