ほとんどネタ的な話なのですが,最近,OSSツールの多様化にともない,本当に便利になっているのですが,ツールの多様化とともに様々なプログラミング言語でプログラムを書かなかければならないことが増えてきました.Thriftなどを使えば,ある程度限られたプログラミング言語で作業できるので楽なのですが,どうしても特定の言語でツールのAPIを叩かなければならないことが多々あります.
autoconf
私は,普段はPerlやC++でプログラムを書くことが多いのですが,最近は上記の理由によりJAVAでプログラムを書く機会も増えてきています.それで,JAVAやC, C++などのプログラミングを行き来していると,いつもビルド環境を構築するのがとてもストレスになるんですね...
CやJAVAで開発する場合は,通常まずビルド環境を構築しなければなりません.C, C++であれば,Makefileを.JAVAであればantのためのbuild.xmlなどを書きます.で,これらの開発を行き来していると本当に,この環境を構築するだけで,ちょっとうんざりしてしまったりします.そこで,ご存知かと思いますが,Makefileをある程度自動で作ってくれる,便利なツールにautoconfがあります.
私もautoconfは使わせていただいており,とても作業が楽になるわけですが,だんだんとautoconfのconfを書くことするらもしんどくなってきます.
シンプルなautoconfの使い方
以下のエントリーで,id:mergentさんが,解説してくださっているように,だいぶ楽にできるようになったのですが,まだまだ手作業でやらなければならないことはたくさんあります.
で,時間をかけてせっかくつくったにも関わらず,configuraとかがこけてしまうと「いやーん」という感じで,開発する意欲をものすごく下げます.これは,はっきり言って作業効率を下げます.やっぱりストレスフリーな開発環境を作りたいと思い,ネタ的なスケルトンを書いてみました.
なお,開発環境以外のストレスフリーな仕事術は以下の書籍が参考になります.
で,話を戻しますと,id:emergentさんのautoreconfの使い方は僕が知っている中で最もシンプルな方法です.概要を引用すると以下のようになります.
1. ソースコードを用意する 2. Makefile.amを用意する 3. configure.acを用意する 4. autoreconfを実行 5. あとは./configure && make && make install
シンプルですね.実際には開発にとりかかるには,ライブラリの部分と実行するプログラムとテストを切り分けたりとやや作業量は増えます.
autoconfを自動で実行するシェルスクリプト
そこで,僕はさくっとこのビルド環境のスケルトンを作るシェルスクリプトを書いて,それを使っています.使い方は簡単で引数に作りたいライブラリ名をあげるだけです.
./cpp_skelton.sh hoge
もしautoconfがないよ!って怒られたらインストールしてあげてください.
# autoconfのインストール # ubuntuなど sudo apt-get instal autoconf # fedoraなど sudo yum install autoconf
これで,hogeというライブラリ名のビルド環境が整います.スクリプトのソースを以下に示します.echoとかしまくっていておもしろかわいい,切ない内容となっていて笑えます.
使い方は簡単で,ソースをダウンロードして,実行権限を与えて実行するだけです.
wget http://gist.github.com/raw/412856/dda419e2c384410486572fd016a2d719f62b9d8d/cpp_skelton.sh chmod +x cpp_skelton.sh ./cpp_skelton.sh hoge
実行すると以下のようなファイル構成となります.
cd hoge tree hoge hoge ├── AUTHORS ├── COPYING ├── ChangeLog ├── INSTALL ├── Makefile.am ├── Makefile.in ├── NEWS ├── README ├── aclocal.m4 ├── autom4te.cache │ ├── output.0 │ ├── output.1 │ ├── requests │ ├── traces.0 │ └── traces.1 ├── autoscan.log ├── config.guess ├── config.h.in ├── config.sub ├── configure ├── configure.in ├── configure.scan ├── depcomp ├── install-sh ├── ltmain.sh ├── missing └── src ├── Makefile.am ├── Makefile.in ├── hoge.cpp ├── hoge_test.cpp ├── libhoge.cpp └── libhoge.hpp
プログラムはすべてsrcディレクトリに格納されています.プログラムの構成は以下のようになっています.
* libhoge.hpp libhoge.cpp : ライブラリの実装用のプログラム
* hoge.cpp : ライブラリ実行用のプログラム
* hoge_test.cpp : テスト用プログラム make checkで使われます.
ここまで整ったらもう,ビルドできる状態となっています.
./configure make make check sudo make install # install はしない方がいいと思います! sudo make uninstall make clean
かなり,俺俺な構成となっていますが,ここまでできてしまえば好みの構成に変更するのは簡単です.スクリプトを変更した方が早いかもしれませんが...
なお,このスクリプトはfedora11とubuntu2.6で動作確認をしましたが,macなどでは動かないかもしれません.
ストレスフリーな開発環境を目指してこれからも精進したいと思います!
なおなお,autoconfには細かい環境変数などがたくさんあって,ちゃんと使うにはある程度勉強しなければなりません.私は以下の書籍を読んで勉強しましたが,よくまとまっていておすすめです.Makefileの仕様についても記述されているので,初心者の方にも\
お勧めでございます.
読んでくださった方で,おすすめなストレスフリーな開発環境がございましたらご教授願いますー!