<<目次>>
makefileって何?
一番簡単な例
一番短いmakefile
サブディレクトリの処理
依存関係を自動作成
makefileを自動作成
makefileの汎用例



■makefileって何?
makefileはプログラムをコンパイル&リンクするのを自動化してくれるツールです。
これがないと、複数ファイルをコンパイルするとき、
  • プログラマがどのファイルを変更したかを覚えておいて、それらのファイルに対してコンパイルし、最後にリンクする
  • 全ファイルをコンパイル&リンクする
のどちらかを行うことになります。
前者では管理が大変ですし、後者ではファイルが多い場合、やたらとコンパイル&リンクに時間がかかって、時間の無駄になります。



■環境面
デファクトスタンダードとしては、GNU Makeが最大のシェアを抱えていますので、これを覚えておけば、問題ないです。
LinuxやCygwinでは(大抵は)こいつが標準インストールされているので、ソースディレクトリでmakeとするだけで、プログラムをコンパイル&リンクしてくれます。
ちなみに、Sun系列のOSでは、gmakeというコマンド名でインストールされていることが多いです。makeとして、エラーが出る場合は、gmakeをたたいてみるとよいでしょう。

参考書籍:
一押しは、make改訂版です。
また、makefileとは無関係ですが、組込みソフトウェア開発における品質向上の勧め (コーディング編)もお勧め。最近バグの多い情報機器の開発者には是非とも読んでほしい一冊。



■とりあえず知っておきたい規則
これ以降を読み進むに当たってとりあえず知っておいて欲しい内容を挙げておきます。
  • 変数定義
    変数名 = 値
    と書いておくと、$(変数名)でその値にアクセス出来ます。
  • 組み込み変数
    makefileでは、予め幾つかの変数が用意されています。その変数を上書きすることにより、デフォルトのオプション(コンパイル時のWarningレベルや最適化のレベルなど)を制御することができます。
    最も代表的なものは、C言語では、CFLAGS、C++では、CXXFLAGS、になります。
  • ターゲット、依存関係、コマンド
    例えば、hello.cからhello.oを作成したい場合は、
    hello.o:hello.c
    	コマンド(例えば、gcc -o hello.o hello.c)
    		
    コマンド行は、TABコードを入れる必要がありますので、ご注意を。



■一番簡単なmakefileの例
makefileには、暗黙の省略とかがあって、実はすごくシンプルに記述することができるのですが、それだと訳分からん状態になりかねませんので、省略無しの記述を紹介します。
ここでは、ソースファイルとして、hello.c,global.c,global.h、実行ファイルとしてhelloを作成する例を挙げています。
all: hello

hello: hello.o global.o
	gcc -o hello -lm hello.o global.o

global.o:global.c global.h
	gcc -o global.o $(CFLAGS) global.c

hello.o: hello.c global.h
	gcc -o hello.o $(CFLAGS) hello.c

	  
分かりやすく、下から上に見ればよいように記述してあります。
一番下がhello.oの作成方法、その上がglobal.oの作成方法、一番上がhello(実行ファイル名)の作成方法を表しています。
all行は、makeをオプション無しで実行したときにmakefileがどのファイルを作成すればいいんだろう?ってことを自動認識するものだと思ってもらえばよいです。
複数の実行ファイルを一つのmakefileで管理する必要がある場合なんかに、all行に実行ファイル名を複数書いておくと、各々の依存関係とルールをmakeが自動判定して、複数の実行フィルを作成してくれます(とりあえず今は気にしなくてよいです)。
このmakefileでmakeすると
  • global.hが変更されたときは、hello.o,global.o作成後、helloのリンクが行われます。
  • hello.cが変更されたときは、hello.o作成後、helloのリンクが行われます。
  • global.cが変更されたときは、global.o作成後、helloのリンクが行われます。
  • オブジェクトが削除された場合は、存在しないオブジェクトを作成後、helloのリンクが行われます。
  • hello(実行ファイル名)が削除された場合は、helloのリンクのみ行われます。
  • 変更ファイルがないときは、何も起こりません。
この短いmakefileでこれだけのことを自動的にやってくれます。
今はファイルが3つだけだからよいですが、これが50ファイルになったらどうしますか、是非ともmakefileの書き方を習得しておきましょう。
なお、後で省略形の書き方も紹介しますので、ファイルが多い場合は、そっちの形で書かないと大変です。今は、心配しなくてよいです。

■もっと簡単な記述方法
依存関係を気にしない(ヘッダファイル無し)なら、
hello: hello.o global.o
	  

だけでもOKですし、
hello: hello.o global.o
hello.o: hello.c global.h
global.o: global.c global.h
	  

なら、依存関係まで含めてOKです。
  • コンパイルオプションを指定する場合は、CFLAGS
  • リンクオプションを指定する場合は、LOADLIBES
  • コンパイラを指定する場合は、CC
に記述しておけばOKです。

 
 
 
 

ページ先頭へ

■一番短いmakefileの例
同一ディレクトリに、hello.cだけ作成しておき、
makefileには、
hello :
とだけ記述し、makeすれば、無事、実行ファイルが生成されます。
 
 
 
 

ページ先頭へ

■サブディレクトリの処理
グループでプログラムを作成するときは勿論、個人で作成するときでも機能別にサブディレクトリで管理したほうが何かと便利ですね。
こんなときは、VPATHを使えばOKです。

--- top - makefile main.c
|- sub1 - sub11.c sub12.c
|- sub2 - sub21.c sub22.c

上のようなディレクトリ構成の場合のmakefileは、下のようにすればOKです。
TARGET = vpath.exe
VPATH = ./sub1:./sub2
OBJS = main.o sub11.o sub12.o sub21.o sub22.o

CFLAGS = -Wall $(DEBUG)
DEBUG = -g

$(TARGET): $(OBJS)
	gcc $(DEBUG) -o $(TARGET) $(OBJS)

clean:
	rm -f *.o
	rm -f $(TARGET)
	  
どうですか、簡単でしょ。
 
 
 
 

ページ先頭へ

■makefileの依存関係を自動生成
makefileの依存関係を手書きで書いているのをよく見かけますが、自動生成可能です。
多くのコンパイラ(実はプリプロセッサ)では、
  • -M
  • -MM
のどちらか、または両方が用意されている場合が多いです。
マニュアルでは、プリプロセッサの項目に記載されている場合が多いです。
一度、お使いのコンパイラのマニュアルを見てみては如何でしょうか。
マニュアル等に記載がない場合でも、使用できる場合もありますので、一度お試しを。
また、Windows環境でもCygwinを利用すれば、gccが使えますので、依存関係部分だけをgccに任せてしまう、という手もあります。
gccの場合、gcc -MM ソースファイル名
で依存関係が標準出力に表示されます。必要に応じてリダイレクトなりすればよいでしょう。
ちなみに、gccの場合、拡張子はデフォルトで.oになっていますので、他の拡張子にしたい場合は、sedとgrepを組み合わせればOKです。
sedはsオプション、grepはvオプションを使用します。
これを流用すると、特定のファイルを依存関係に含めないようにすることも可能になります。

参考書籍:
一押しは、Make―C programming utilityです。(make改訂版の新版のようです)
(データ提供:Amazon.co.jp)

make 改訂版(Andrew Oram,オライリー・ジャパン)

¥ 1,890 通常24時間以内に発送
Amazonポイント:¥ 18
レビュー数:2
●プログラマーのお友達Make
Cプログラムをコンパイルする際に必要な処理を記述するmakeの使い方の本

最近の開発環境はjava & Eclipseという組み合わせだが、Cにおける
統合開発環境(というのはいいすぎだが)はmakeがその一部であった。
コンパイルする際の依存関係,コンパイルする範囲などマクロで自由自在に
制御するにはこの本が必須であった.

内容は,簡単なmakefileの作り方,そして文法の詳細が展開例とともに記述してあり
とてもわかりやすい.さらに大規模な開発での適用方法を記述している
プロジェクト管理の章やトラブルシューティングの章と本編111ページの中に
収められているので確かに不足は感じるもののコンパクトさが使いやすさに
つながっていると考える.

また付録はクイックリファレンスと拡張そして実装の相違点の確かめ方が
書いてあり分厚くなりがちなこの手の本にしては150ページに収まっているのは
大変秀逸ではないかと思う.

さらに,訳注が本文中に挟まれているなど訳に工夫のあとが随所にみられ,
英語の本よりもわかりやすいのではないかと思う.

既に10年前の本ではあるが,今でも充分に役立つ本ではないかと思う.
●makeファイルを独学で学んできた人にもお勧め
makeファイルを独学で勉強してきた人には、本書を見て「むーなるほどー」と、何か引っかかってたものが取れる感じがするでしょう。
内容的にはmakeの王道的な記述が目立ちますが、本書の内容を覚えることが出来たならば、それは一生の財産です。

初めてmakeファイルを作成する人にとっても、体系良く学ぶことが出来ると思います。実際にやってみながら覚えることをお勧めします。



GNU Make(Robert Mecklenburg,オライリージャパン)

¥ 2,940 通常24時間以内に発送
Amazonポイント:¥ 29
レビュー数:1
●どのファイルをコンパイルするかを指定する道具
どのファイルをコンパイルするかを指定する道具のMake。Makeのソースを読んでも、複雑すぎて、すぐには分からない。
複雑な設定が可能であるため、既存のMakefileを解読しようとしたら、本書のようなマニュアル本を利用しすると分からる点がある。
自分で複雑なシステムの構築を構成しようとするのは、さらに大変。
自分で、順々に複雑になってきたMakefileを分かりやすくするのには、どうしたらいいかを調べるのに使う。




GNUソフトウェアプログラミング―オープンソース開発の原点(Mike Loukides,オライリー・ジャパン)

¥ 3,360 通常24時間以内に発送
Amazonポイント:¥ 33
レビュー数:3
●GNUソフトウェアについて書かれていることは確かだけれど。
端的にいうと、UnixライクなOS上でemacsを使ってソースコードを編集しgccを使ってコンパイルしmakeも使おう、gdmも使おう、rcsも使おう、gprofも使ってみよう、という簡単なガイドブックです。
それぞれの内容について非常に薄くサラリと書かれているので実用性は低いですが、俯瞰するには良いかもしれません。

それ以外について書かれていることは、オープンソースについてや、GNUのライセンスについての著者の雑感ですかね。結局、「法的なことについて専門外なので」的な言い方なので、得られる情報は少ないですが週刊誌的な読み物としては暇つぶしにはなると思います。

想定される読者としては、EclipseやVisual Studioしか使ってなかった人たちが、ある日、唐突に「LinuxでC/C++で開発しろ、ツールは全部タダらしいぞ」と言われたときに用意すべきツールについて簡単に俯瞰できることぐらいかな、とか思いました。

タイトルとしては「Eclipseで始めるJAVA」と同じノリで、「GNUではじめるC/C++開発」とかじゃないかな。autoconfもcvsもないレガシーすぎる内容ですけれど。
結局のところ、翻訳がどうこうというより、そもそも内容として、あんまり役には立たない本という印象です。
●HOWTO本でよかった。
訳者には日本語を書く能力が不足しているようです。
ページをめくればめくるほど、
その日本語の難解さに新たな怒りがこみ上げてきます。

この訳者が翻訳した他の書籍のレビューを見てみましたが、
「OSの基礎と応用」でも同様の評価をされている方がおられました。
その方によると、英語を読む能力も不足しているとのことですが、
私は英語版を入手しておりませんので、この書籍の翻訳自体の質はよく分かりません。
この書籍が言語仕様や詳説の類でなく、
HOWTO本であったのが唯一の救いか。


●基本は大事
これまで見よう見まねで使ってきたので今更と思ったのですが、結構知らないことがあって、基本を再確認させてもらいました。


GNU Autoconf/Automake/Libtool(,オーム社)

¥ 3,990 通常24時間以内に発送
Amazonポイント:¥ 39
レビュー数:4
●autoconf, automakeを理解していないと、
autoconf, automakeを理解していないと、ソースコードの管理、Make、自動生成など、複雑化するオープンソースの維持のための重要な技術である。
原文の間違い、日本語の間違いなど、オープンソースではありがちな問題も、正誤表を正確に出していくことが重要である。
過去の版については、正誤表の提案をしたことがある。すぐに対応していただき、正誤表が公開された。
●残念ですが、この本でautoconfを理解するのは時間の無駄です。
autoconf, automake等の書籍では、唯一のものだと思います。

日本語訳が良くないような気がします。
というか原文が悪いのかもしれません。
全体の構成が良くないですし、人に理解してもらうよう配慮に欠けていると思われます。

本を買うよりネットで情報を探して理解することをお勧めします。
●移植性のあるソフトウェア作成
本書は、Autoconf/Automake/Libtool を使用して、移植性のあるソフトウェアを作成する方法について書かれています。
これらのツールを直接使用した事が無くても ./configure といえば分かるでしょう。(./configure スクリプトは本書が示す内容の一部でしかありません)

本書は、それぞれのツールはもちろん、移植性のあるC,C++,シェルスクリプトの書き方、共有ライブラリの作成方法等を実際にソフトウェアパッケージを作成する例を通して紹介しています。

ただ、想定する読者像が不明瞭な点が気になります。

入門書ではなく、かといって実践的なものでもなく、ある部分でさらっと流すだけだが、また別の部分では懇切丁寧に解説していたり
各章の重み付けに統一性が無く、話の本筋を見失ってしまいそうになります。
(複数の著者によって書かれた所為かもしれません)

既にソフトウェアを作成、配布している読者がAutotoolsの仕様を試みる場合、本書は有用です。

ソフトウェア開発/配布に対する十分な前提知識を持ち合わせていない読者の場合には本書は少々難解ですが、為すべき事を適切に把握でき、また必要な情報のポインタも十分に示されているので、Autotoolsの世界へのガイドとし十分に機能するでしょう。

本書は訳本ですが、日本語としてすんなりと読める文章になっています。

訳注も豊富で、訳の質は高いと思います。

●configureスクリプトをつくりたいならこの本
プログラムを書き、そのソフトウェアを配布したいと考えた場合、ソースコードごと配布するのが一般的です。しかし、プラットフォームごとのコンパイラ、基本プログラムの動作の差異が、移植性に制限をかけることがたびたび起こります。

その問題を避けるためにシステムごとの差異を吸収するconfigureスクリプトを生成するAutoconfとその派生ツールはつくられました。
この本は、Autoconfの使い方を通して、移植性の高いソフトウェアを書く指針も示しています。
オープンソースのUnix系プログラマは必読です。



ハックキットで夢のDebian GNU/Linuxサーバー 玄箱PROをハックしよう!(,アスキー)

¥ 2,310 通常24時間以内に発送
Amazonポイント:¥ 23
レビュー数:2
●内容が薄い
値段が2000円代と高い
個人的に興味をもったのはPodcastingの設定方法のみ。
これでは買った意味がない。
せめて、DDNSの設定方法、サーバー運営の方法を載せて欲しかった
●内容が薄い
ネットで少し検索すれば分かることばかり。
値段の割りに非常に内容の薄い本でした。残念。


CとGNU開発ツールによる組み込みシステムプログラミング 第2版(有馬 三郎,オライリー・ジャパン)

¥ 3,360 通常24時間以内に発送
Amazonポイント:¥ 33

Warning: Invalid argument supplied for foreach() in /virtual/kommy/public_html/inc/func.php on line 75


GNU Emacsデスクトップリファレンス (UNIX text processing)(Debra Cameron,オライリー・ジャパン)


レビュー数:3
●紙のリファレンスの必要性
EmacsというエディタはWondowsの一般的なエディタと違って独特のコマンドが使いこなせないと真価を発揮
できない。私も始めの頃はEmacsが理解できず困ったのだが、使い方がわかってくると非常に強力な
ソフトウエアであることが理解できた。今ではWindows上でもEmacsクローンのエディタを使っている。

そこでEmacsかなめのコマンドであるが、そのコマンドがなかなか覚えられない。コピー・ペーストの
コマンドくらいなら頻繁に使うので覚えられるが、たまにしか使わないものはやはり無理だ。そこで
リファレンスを参照しながら使うことになる。では、そのリファレンスはどうやって参照するか?
たいていの人はオンラインドキュメントだと考えるだろう。ところがここに落とし穴がある。オンライン
ドキュメントが使いにくいと感じる人がいる。実は私がそうなのだ。その場合は紙の媒体に頼る必要がある。
そこに本書のような手頃なリファレンスの存在意義がある。

リファレンスとしての本書の出来はいまいち。もうちょっとうまく記述できなかっただろうか?
あと、大きさは出来れば文庫サイズにして欲しかった。
●オンラインドキュメントがあれば十分
この本は,GNU Emacsを使ううえでの基本的なコマンドから,簡単な(ほんとにかんたんな)カスタマイズ方法までを各項目1~2行程度の説明を添えて50ページ弱にまとめてあります.サイズも小さめで,その名の通り机の上に置いておき必要に応じて参照するような使い方を想定しているものと思われます.

GNU Emacsがまったくはじめてという人には,この本は分厚くないし値段も手ごろなので一見良さそうに見えるのですが(わたしがそうでした),実際のところ,この本の世話になる機会は一度もありませんでした.なぜなら,GNU Emacsには,高機能なヘルプが標準で装備されており(例えば, apropos-commandと呼ばれるコマンドで名前から機能を検索することができるなど),各コマンドごとに詳細なドキュメントが付属しています.またインターネットで自由にマニュアルを見ることもできます(日本語訳も見られます).つまり,いちいち本のページをめくって目で項目を探すような苦労をせずとも,キーボードをちょっと叩いて,オンラインヘルプで調べるほうがよっぽど手間がかからないのです.

これからGNU Emacsを使い始める人は,まず "C-ht"とコマンドを叩いてチュートリアルモードで練習をすることをお勧めします.ヘルプの見かたを含めて一通りの基本的な知識が身に付いているでしょう.それで十分です.

●GNU Emacsコマンドリファレンス
UNIX系OSでは代表的なエディターのEmacsのコマンドリファレンスある。余計なことは書いてないので、純粋にコマンドが分からないときに参照するといった用途で威力を発揮する。ある程度Emacsを使いこなせる人には非常に便利であろう。そうでない人はまずEmacsを使えるようになってからのほうが本書は有効である。


GNU Make(Richard M. Stallman,アスキー)

¥ 1,890 通常24時間以内に発送
Amazonポイント:¥ 18
レビュー数:5
●部屋に閉じこもり牛にならざるべきか。
本選びに時間がなくて、目先に飛び込んだASCIIという文字だけで購入して痛い目にあった初心者の一人です。
PCの隣に置くような本ではなく、GNU makeの振る舞いを解説してあり上級者向けのようです。特徴は以下の通りです。

 ・図表が一切ない。
 ・説明が口語的で大事なことが文中に隠れている。
 ・急に分からない文法が出てくる。

 ・makeのことをある程度理解していないと内容が理解できない。

本書の5頁に、日本語訳したtextinfoファイルが「ftp://ftp.ascii.co.jp/pub/GNU/make/」あるという記載があり、
購入前に参照してから紙媒体に移行するのはどうでしょうか?

●翻訳が…
Stallmanが書いたオリジナルの英語版ã‚'読ã‚"だのだが、良くまとまっていて、読みやすかった。でも毎回英語ã‚'読むのもã-ã‚"どいなぁ、と思って本書ã‚'è³¼å...¥ã-た。

…が、翻訳が最悪で、非常に読みにくい。例ã‚'挙ã'ると、prerequisiteã‚'、最初は『前提条件』と訳ã-ている(ã"れ自ä½"もどうかと思うが)のに、次のページでは『å¿...須条件』になり、æ›'に次のページでは『å¿...要条件』になってã-まっており、prerequisiteが技è¡"ç"¨èªžã ã¨ã„うã"とがまるで分かっていないのが分かってã-まう。ä»-にも誤訳があり、訳è€...はmakeã‚'使ったã"とが無いã‚"じゃないかとç-'ってã-まう。わずか数ページ読ã‚"だだã'でã"の有様なので、すっかり読むæ°-ã‚'失くã-てã-まった。
ã"の本ã‚'読むなら、オリジナルの英語版ã‚'読ã‚"だæ-¹ãŒã‚ˆã»ã©åˆ†ã‹ã‚Šã‚„すいと思うã€!‚ã-かも“タダ”だã-ね。

●初心者向きではない
make の勉強用にと購入しましたが
一通り読んでみたところ make の使い方を覚えるための本というよりは
すでにある程度使っている人がさらにつっこんだ使い方をするために読む本という印象です。
make をバリバリに使いこなしたいというならともかく、初心者や簡単なことができればいいというのであれば別な本をあたったほうがいいでしょう。
●GNUのMAKEを知りたい人に向いてます
とにかく、わかりづらくmakeを初めて勉強する人ならば、オライリ―のmake本の方をおすすめします。ある程度、makeを知っていて、特にGNUのmakeをより知りたいという方のための本であると思います。 make初心者には向いてません。
●分かりにくい
Makefileのエレガントな書き方を勉強しようと思い購入しました。

詳しくは書かれているのですが、とにかく表現がわかりにくい、後方参照が多いのには参りました(前方参照も多い)。専門用語がどんどん出てくるのも不親切です。読んでいてフラストレーションがたまります。もう少し誰にでも理解できるような日本語の文章になるように推敲してほしいものです。おすすめできません。



Debian GNU/Linux徹底入門第3版 Sarge対応(,翔泳社)

¥ 4,968 通常24時間以内に発送
Amazonポイント:¥ 49
レビュー数:5
●第1版からの利用者です。
DEBIANは、linuxの中で、開発者に優しいapt-getがあるのは心強かった。
カーネルのソースをはじめ、ソースコードの依存関係が明確になっているのは助かります。
カーネルソースのコンパイル、パッチあてなど、楽にできる。
コミュニティの維持にも力を入れていることが分かる。
●Sarge版はSATA非対応のためインストール不可能
Sarge版はSATAという規格に対応していないのでSATAを使ったマシンのハードディスクを認識できずインストールできません。要注意です。何を隠そう私はインストールできず、結局、ネットカフェでEtch版を焼きました。
●Debianの入門書でありリファレンス本
入門書でありリファレンス本です。とにかく情報量が半端じゃないです。これ一冊でDebianで使える主要なツールの使い方は網羅しているでしょう。ただ、この本では文字ベースのインストーラしか解説していませんがGUI インストーラの方が簡単だし見た目がエレガントでテンション上がります。既にインターネットにつなげる環境がある方は付属のCD/DVDによるインストールは行わず、Debian JP ProjectのWEBサイトの「クイックインストール」を参照して行った方いいと思います。
●ほぼ網羅出来ます
初級から上級のDebianユーザまでオールマイティに網羅している解説書です。Redhat,fedoracoreに物足りなさを感じる方は読んでみてはいかがでしょうか?その上、Spamなどのセキュリティに対するシステム構成の考え方、導入までの方向性と詳細に記載もしています。
●Debian派に転向
買って正解でした。
丁寧にわかりやすく書かれています。
メインの環境を、FedoraCoreからDebianに入れ替えてしまいました。


プログラミングの力を生み出す本―インテルCPUのGNUユーザへ(,オーム社)


レビュー数:2
●理解には情報不足,試すには冗長
C言語の入門書の内容は一通り知っているがプログラミング能力は中途半端という人向けに書かれた本.C言語に限らずプログラミング技術なんてのは必要に応じて有限の仕様にあたるとか,実務をこなすとか,抽象的なレベルで把握するとか,そんな方法でレベルアップするものである.本書は様々な上達方法のうち,かなりC言語よりの方法(高級アセンブラよりの方法)に焦点を当てた解説である.C言語のコードとアセンブラのコードを比較しながらCPUの仕組みの説明をしているのが主な内容.

さて,本書の意義だが,最も大きなものは手軽に試せる形でCPUの仕組みとアセンブラを説明していることである.そして,他の意義はほとんどないと思う.改定2版1刷では,アセンブラ(特定CPU限定)の文法の説明がいい加減,ページ数の調整のために付け加えたような話(Gnuplot,フリーソフトの間違った解説,初歩的なアルゴリズムの説明他)がちらほら,補数を定義せずに行なわれている補数の意義の説明など,ある程度の知識がある人ならば手直ししたくなるような部分がけっこうある.何箇所か手直しすれば良い参考書になりそうではあるが,今の段階では,理解には情報不足,試すには冗長である.
●初心者向けの教則本
一読して初心者向けの教則本という印象です。大学の演習等で、講師の指導の元に使うべきもので、これだけを自習するのであれば、価格の割りに内容が乏しいように思われます。C言語の2次元配列の説明に関する記述はこれで正しいのか疑問です。またGCCやGDBのプログラム開発ツールと並んで、なぜGNUPLOTの説明を入れてあるのか、著者の意図が理解できません。星五個はどう考えても多すぎます。


これで、ヘッダを修正したらmake cleanしてね、というのをしなくてよくなります。

 
 
 
 

ページ先頭へ

■makefileを自動生成
autoconfとautomakeを使うと、makefileを自動生成出来ます。
ただ、Cygwinだと、よくあるUnix用の説明のとおり実行しても、
「できないじゃん」ってことになってしまいます。
これは、雛形ファイルの配置場所とautoconf,automakeの実行パスによるものです。
  • 雛形ファイル
    /usr/autotool/devel/share/automake-1.9/ 1.9は異なるかもしれません。適宜読み替えてください
  • 実行パス
    /usr/autotool/stable/bin
では、hello.cのmakefileを自動生成する例を挙げていきます。
  1. 作業ディレクトリにcd
  2. 事前準備
    cp /usr/autotool/devel/share/automake-1.9/install-sh .
    cp /usr/autotool/devel/share/automake-1.9/mkinstalldirs .
    cp /usr/autotool/devel/share/automake-1.9/missing .
    cp /usr/autotool/devel/share/automake-1.9/depcomp .
    touch INSTALL NEWS README COPYING AUTHORS ChangeLog
  3. configure.inを作成
    /usr/autotool/stable/bin/autoscan 
    mv configure.scan configure.in
    configure.inを以下のように書き換えます
    dnl Process this file with autoconf to produce a configure script.
    AC_INIT(hello.c)
    AM_INIT_AUTOMAKE(hello, 0.1.0)
    AM_CONFIG_HEADER(config.h)
    
    dnl Checks for programs.
    AC_PROG_CC
    
    dnl Checks for libraries.
    
    dnl Checks for header files.
    
    dnl Checks for typedefs, structures, and compiler characteristics.
    
    dnl Checks for library functions.
    
    AC_OUTPUT(Makefile)
  4. Makefile.amとacconfig.hを準備
    touch Makefile.am
    touch acconfig.h
    Makefile.amを以下のように書き換えます
    bin_PROGRAMS = hello
    hello_SOURCES = hello.c
    acconfig.hを以下のように書き換えます
    #undef PACKAGE
    #undef VERSION
  5. configureスクリプトを自動生成
    以下のコマンドを実行することで、configureファイルが生成されます。
    /usr/autotool/stable/bin/aclocal
    /usr/autotool/stable/bin/autoconf 
    /usr/autotool/stable/bin/autoheader 
    /usr/autotool/stable/bin/automake
    /usr/autotool/stable/bin/automake
  6. Makefileを自動生成
    configureスクリプトを実行(./configure)すれば、Makefileが自動生成されます。
    元になったMakefileは、こちらも自動生成されたMakefile.inになります。

後は、ソースを編集してmakeするだけです。
単一ファイルでは面倒なだけですが、他環境への配布を意識する必要がある場合などは、configure対応しておいたほうがよいでしょう。

★参考になる書籍:
GNU Autoconf/Automake/Libtool
GNU Autoconf/Automake/Libtool


 
 
 
 

ページ先頭へ



■makefileのサンプル
私は人材派遣会社やアウトソースの名目で様々な会社で勤務してきました。
最近勤務した会社で、
  • makefileの依存関係が...
  • makefileをちゃんと作ってなくて...
などという話をしているのを聞き、それなら、ある程度汎用性を持った、makefileを提供しよう。
というのが、このページ開設のきっかけになっています。
もちろん、依存関係も自動生成です。手書きで書くなんて、ナンセンスです。

汎用的なmakefileの一例(単一ターゲット)
上のmakefileは、
  • SRC=で定義されたCソースファイル
  • HEADER=で定義されたCヘッダファイル
  • makefile本体
のどれかのファイルに変更があった際に、
TARGET=で定義された実行ファイルを作成する
makefileの一例です。

環境は、CygwinのGCC環境を想定しています。
他の環境の場合は、若干の修正が必要かもしれません。

一応汎用的になっていて、
Cソースが追加になったら、SRC=とOBJ=に追加
Cヘッダが追加になったら、HEADER=に追加
するだけで大丈夫です。
但し、
特定のファイルに対して別のオプションでコンパイルしたい場合は、
そのファイルに対して、別途ルールを指定する必要があります。

使用方法は、makefile冒頭部分に記述してあるとおりです。
基本的には、コマンドラインから、"make"とするだけです。
Meadow/Mule/Emacsなどでは、
ソースファイルやmakefileのウィンドウにフォーカスを当てて、
M-x compile として、ミニバッファで、make、と入力すればOK

余談になりますが、C++を扱う場合の注意点は
  • CFLAGSではなく、CXXFLAGSにコンパイルオプションを指定する
  • CCではなく、CXXにコンパイラを指定する
これらに注意しておけば、基本的にはCと同じです。

GNU makeの日本語マニュアルがCOOPさんの部屋にあります。
作者に感謝し、おおいに活用させていただきましょう。

それでは、makefileなどに振り回されることなく、
プログラム開発に時間を費やしましょう。


またまた余談ですが、
Cygwinに標準でX-WindowとEmacsが添付されました。
これで、GDB+Emacsデバッグ環境がCygwinのみで、
整うことになりました。
GDB+Meadowでは、工夫しないと無理がありましたから、
これは、助かる方も多いでしょう。
makefileを見てもらえば分かりますが、CygwinのGCCでは、
Windowsアプリケーション開発が可能です。
デバッグ環境まで考えれば、BorlandFreeCompilerを
超えたかもしれませんね。


ページ先頭へ






■お知らせと連絡先

このウェブサイトで取り上げて欲しい話題や分かりにくい点などありましたら、
以下のメールアドレス宛にメッセージをいただければ、参考にさせていただきます。

メールアドレスは、work_komiあっとまーくyahoo.co.jpです。
(「あっとまーく」は、半角英数のあっとまーくに変換してね。)

また、XBOXをお使いの方は、ゲーマータグ(akbox)にてフレンドリクエストを受け付けています。