Home > C

C Archive

Make

  • 2007-11-22 (Thu)
  • C
ネットワークプログラミングの勉強をしていたら、Make について学ぶ機会があった。
今まで Linux でソースからソフトウェアをインストールする時ぐらいしか使っていなかった。
どんなものなのかも調べたことが無かったのでインストール時にやる、という程度の
認識のみで、何をするものか全然知らなかった。

結局 Make はプログラム間の依存関係を記述しておき、コンパイルの際の依存関係把握の
手間を省くためのもの、みたいな認識かしら。

a.c, b.c, c.c というソースファイルがあり、これらのオブジェクトファイルを結合した
実行ファイル EXE を作ることを目的とする。この時

1. *.c をコンパイルして各プログラムのオブジェクトファイル (*.o) を生成
2. *.o を結合して EXE という実行ファイルを作る

上記のような手順を踏む必要がある。
この時 EXE は *.o のファイルに依存している。(*.oのそれぞれの機能をあわせているため)

ここで a.c の内容を変更する必要が生じた時、再コンパイルする必要があるのは
a.c に依存しているものだけである。
今回のケースの場合 a.c に依存しているのは a.o である。
そして EXE は a.o に依存しているため、a.c にも依存しているといえる。
よって a.c の内容を変更した場合

1. a.c をコンパイルして a.o を生成
2. *.o を結合して EXE という実行ファイルを作る

という手順を踏む必要がある。
で、これぐらいの規模なら自分で依存しているプログラムを調べてそれを再コンパイルして、
リンカで再度オブジェクトファイルを結合すればいいだけなのだが、
規模が大きいプログラムとなると何十ものソースがあり、依存関係を調べるのが大変になる。
そこで Makefile に依存関係を記述しておくと、依存関係によりコンパイルが
必要な部分のみ自動でコンパイルしてくれるため、依存関係を調べる負担がなくなる。
また規模が大きい場合はコンパイル時間の短縮にも繋がる。

Makefile の記述方法は基本的なことはとりあえず学んだ。
まだ色々あるみたいだけど、その辺は必要に応じて。

I'm Feeling Lucky

  • 2007-06-28 (Thu)
  • C
なんか目が冴えていたので、先日購入したUNIXネットワークプログラミング入門を読み進めてみました。

……

良書すぎる……どうなってんだ……

思わず某ゲームの評価のセリフをなぞるほど良書です。

読みやすいし、解説もわかりやすい。あの評価の凄さは伊達じゃなかった。ファイルディスクリプタなど、OSに関することもわかりやすく解説してくれているため、プログラミングをする上で重要な知識も一緒に深めることができます。

現在2章を読み終わったとこですが、これならスラスラと読んでいけそう。

プログラムの基本的な書き方を学び終わり、さらにプログラミングの知識を深めようという時に、次に何をすればいいのかがわからず立ち止まってしまうことがしばしばあると思う (僕だけ?)。この本は、そんな状態から1つLVUPするためにもいいと思います。

惜しむらくは、読むのにC言語の基礎知識が要求されるということ (これは仕方ないけれど) と、改訂版がでたのにまた絶版になってしまったのかもしれないということ (今Amazonで見たら中古で1万……ボリすぎだろ)。

良い本なのに入手困難というのは非常にもったいない。絶版になってしまうならせめてウチの大学の図書室にもおけばいいのに。また改訂版でないかな、この本が埋もれてしまうのは本当にもったいない。

Home > C

Page Top