上野家のホームページ
ナーマル,マリン,ココ
[
新規
|
一覧
|
検索
|
最新
|
ヘルプ
]
開発/autotools
のソース
資料室
開発
/
autotools
のソース
[
差分
|
バックアップ
|
リロード
]
[ ]
差分
を表示
開発/autotools
へ行く。
« Prev
#topicpath #contents * autotoolsのすすめ [#hb90ff68] Makefileを手を抜いて作成したい。~ そんな時に,Makefileを簡単に作成するためのツールがautotools((UNIX系OSにおいて,ソフトウェアパッケージ開発を行うためのツール及びフレームワークの一種))。 通常,Makefileにはコンパイルする際の諸設定,リンクする際の諸設定,処理順序などを逐一記述しておかなくてはならない。しかし,これは,Makefileの作成に慣れていないと面倒な作業です。~ そこで,Makefileよりももっと簡単な設定ファイルMakefile.amだけを記述して,あとの細かなところの設定記述はツールを使って作り出せれば便利です。このような時に使用するのが,autoconf,automake,autoreconf,libtoolなどのautotools。 ** makeとMakefile [#cdabaedb] makeは,そのディレクトリ内にあるMakefileを参照して,書かれた通りにコンパイルやリンクを行っていくコマンドツールです。 簡単なMakefileの例だと, sample.o : sample.c gcc sample.c -o sample.exe 単に1つのソースファイルをコンパイルするだけならmakeをする必要はないけど,複雑な依存関係をもっているライブラリを使用したり,複数のファイルを使ってコンパイルするときなんかは,いちいち毎回コマンドを打って手作業でこれをやると大変なので,makeを使うわけです。 この時はMakefileを一度作っておけば,その後はmakeと打てば複数ファイルをコンパイル出来たり,必要なライブラリをリンク出来ます。依存関係にあるファイルの実行ファイルが既に出来ている時は,そのファイルのタイムスタンプを見ながら,ソースファイルに更新があったとかを自動的に認識して,コンパイルはしないで無駄な処理をしない…とか,そういうことも自動で行ってくれます。 ** configureってなに? [#ec26f595] 他人にソースを配布するときは,手軽にコンパイルができるようにMakefileも一緒に配布したい。~ しかし,相手の環境によってコンパイルの仕方が変わってしまうかもしれないので(ライブラリが見つからない〜とか,違うOS上で実行するとか),単にMakefileを一緒に配布しても上手くいかないことも多いわけです。~ そこで登場するのが,''configure''((configureは,Bourne Shell用のシェルスクリプト))コマンド。~ ''configure''は,実行すると,その実行した環境に合った''Makefile''を生成してくれるシェルスクリプト。これを''Makefile''の代わりにソースコードと一緒に配布することで, $ ./configure $ make $ make install という手順でコンパイル,インストール,が可能になったりします。この時,たとえ相手の実行環境が違う場合であっても,configureがその違いを吸収してくれます。 configureを手作業で一から書くのはめんどうです。なので,configureを自動で生成してくれるツールautotoolsの出番となります。~ これらのことにより,Makefileを手を抜いて作成することも,誰かにコンパイルも可能なソースコードを渡すことも出来るようになります。 ** autotoolsを使えるようにする [#af662a00] [[MinGW>/開発/toolchain/MinGW]]をインストールして使えるようになっていれば,これらのツールもインストールされています。~ [[MinGW>/開発/toolchain/MinGW]]をインストールしていない場合は,さっさとインストールしちゃいましょう。 ** とりあえず使ってみる [#k37cdf00] *** サンプルの用意 [#tfc46514] まずは試しに,こんなソースのファイルsample.cを用意してみる #include <stdio.h> int main(void) { printf("Hello Yuji!\n"); return 0; } ''Makefile.amを作成''~ 移植性の高いMakefileを作るためのMakefile.acの雛形(Makefileの大元)になる''Makefile.am''を作成する。~ noinst_PROGRAMS = sample sample_SOURCES = sample.c これは,sample.exeはsample.cから作られる場合です。 noinst_PROGRAMSは,noinstで「make installしてもインストールしない」の意味で,PROGRAMSは実行ファイルを意味していて,それをつなげたものです。この変数には,「make installしてもインストールしない」「実行ファイル」の名前を設定します。複数設定可能。~ ちなみに,make installしたときにインストールする実行ファイルは,bin_PROGRAMSに設定します。 sample_SOURCESは,noinst_PROGRAMSに設定したsampleに関するビルド情報の意味で,SOURCESはソースファイルを設定する。複数設定可能。 %%しかし今回は,何も記述していない空のファイルでも大丈夫です。%% $ touch Makefile.am %%Editorでも右クリックで新規ファイル作成でもとにかくファイルを作ればOK%% つまり,''必要なファイルとしては,ソースコード以外にはMakefile.amだけ。'' *** autoscanでconfigure.acを生成する [#b66d2551] $ autoscan $ 好きなEditorでconfigure.scanを編集する $ mv configure.scan configure.ac autoscanを使ってconfigure.scanを作成した後,ファイルを以下のように編集します。 # -*- Autoconf -*- # Process this file with autoconf to produce a configure script. AC_PREREQ([2.68]) AC_INIT([sample], [1.0.0], [y-ueno@nalux.co.jp]) <-- 編集 AC_CONFIG_SRCDIR([sample.c]) AC_CONFIG_HEADERS([config.h]) AM_INIT_AUTOMAKE([foreign]) <-- 追加 # Checks for programs. AC_PROG_CC # Checks for libraries. # Checks for header files. # Checks for typedefs, structures, and compiler characteristics. # Checks for library functions. AC_CONFIG_FILES([Makefile]) AC_OUTPUT AC_INITマクロにプログラムの情報を入れることと,AM_INIT_AUTOMAKEマクロを追加します。~ AM_INIT_AUTOMAKEは,automakeを使うことをautoconfに伝えるマクロのようです。~ この時の引数はGNU準拠のprojectとして作るわけではないので,foreignにします。((GNU準拠にした場合,INSTALL,NEWS,README,AUTHORS,ChangeLog,COPYING,といったファイルを用意する必要があります。))~ AC_PROG_CCは,使用するCコンパイラの設定で,configureが環境変数CCを使用するという意味になる。~ AC_CONFIG_FILES([Makefile])は,Makefile.inを雛形にしてMakefileを生成しろという意味になる。 これが終わったら,ファイル名を''configure.ac''にリネームします。 *** autoreconfでconfugureを作成する [#k5c92cfd] 普通は,この後autoconf/automakeを使用してconfigureを作成するわけだけど,この手順を手軽に行うautoreconfを使うと便利。 $ autoreconf -i これで,configureが作成される。 AM_INIT_AUTOMAKE([foreign 1.11.1])の効果で,必要なファイルが追加される。特にMakefile.inのおかげで,移植性が高いものになっている。 *** autoconf/automakeでconfigureを作成する場合 [#ufa4753f] autoreconfを使わないで,autoconf/automakeでconfigureを作成する場合。autoreconfで作成する場合はいらない。(autoreconfは,この処理を全部行ってくれる。) $ aclocal これで,aclocal.m4が作成される。~ aclocal.m4は,configure.acやMakefile.amを解析して,autotoolsを実行するのに必要なマクロを集めたものだと思う。 $ autoconf autoconfを使って,configure.acを解析してconfigureを作成する。 $ autoheader autoheaderを使って,configure.acを解析してconfig.h.inを作成する。~ config.h.inは,configureがconfig.hを作成する時に使用する。 $ automake --add-missing automakeを使って,Makefile.amとconfigure.ac,config.h.inを解析してMakefile.inを作成する。--add-missingで,install-sh,depcomp,missingなどのファイルを作成する。~ Makefile.inは,configureがMakefileを作成する時に使用する。 *** configureを実行してMakefileを作成 [#s6e839f0] $ ./configure を実行すると,Makefileがめでたく作成される。 *** コンパイルと実行 [#q402389e] $ make $ sample Hello Yuji! makeコマンドでコンパイルされ,sample.exeが出来ます。実行してみると無事動きました。 *** make distしてみる [#q99e7a68] $ make dist を実行すると,sample-1.0.0.tar.gzが作成される。~ 他の人にソースコード類を渡すのにはこのファイルを渡せばOKです。便利ですね。~ この時作られるファイル名は,configure.acに記述した AC_INIT([sample], [1.0.0], [y-ueno@nalux.co.jp]) から作られます。 $ make distcheck でパッケージを作成して,正しくプログラムが作成できるかどうかを実際に試してチェックすることが出来ます。~ %%中身が空のMakefile.amでもMakefileが出来るとは%%,さすがGNUツールです。 * Autotools(autoconfとautomake)による作業の流れ [#e2ed497c] #ref(autotools.png)
« Prev
開発/autotools のバックアップ一覧
開発/autotools のバックアップソース(No. All)
1: 2016-04-07 (木) 09:10:13
yuji
現: 2020-12-26 (土) 16:07:35
yuji
Attached file: autotools.png
Counter: 1012, today: 1, yesterday: 0
Copyright©2008 Yuji Ueno All Rights Reserved.
ログイン
ユーザ名:
パスワード:
IDとパスワードを記憶
パスワード紛失
メインメニュー
ホーム
でぶlog
資料室
最新ページ一覧
全ページ一覧
ヘルプ
» 関連ページ
» Wikiソース
» 編集履歴
» バックアップ一覧
» 添付ファイル一覧
フォーラム
お問い合わせ