次のページ 前のページ 目次へ

3. Make の使用

Makefile は構築の段階で鍵となるファイルです。Makefile の最も 単純な使い方は、「バイナリ」つまりパッケージの実行部分のコンパイルや 構築を行うスクリプトとしてのものです。 Makefile を使えば、ソフトウェアパッケージの更新をする際に全部のファイル をいちいち再コンパイルしないで済ませることもできるのですが、この使い方 はここでは関係ないのでまた別の話になります。

いくつかのタイミングで Makefile は ccgcc を実行 します。正確には、プリプロセッサ、C (や C++) のコンパイラ、リンカを順に 実行します。

普通、make を実行するには make とタイプするだけです。 make を実行すると、普通はパッケージに必要な全ての実行可能ファ イルが構築されます。しかし、make にできることはこれだけではありません。 例えば、ファイルを適切なディレクトリにインストールしたり(make install)、 古いオブジェクトファイルを消去できます(make clean)。make -n を実行すると、make が呼び出す全ての命令を実際の処理を行わずに表示だけ させることにより、構築のプロセスをあらかじめ確認できます。

一般的な Makefile を使うのは非常に単純なソフトだけです。もっと複雑な インストール作業では、あなたのマシンのライブラリやインクルードファイル、 リソースに合わせて Makefile の設定を必要があります。このことは インストールに X11 のライブラリが必要なときによく起こります。 X11 では Imakexmkmf がこの作業をしてく れます。

man ページからの引用によると、Imakefile は Makefile の 「テンプレート」です。 imake ユーティリティは Imakefile を元にして システムに合った Makefile を作ります。しかし、ほとんどの場合は、imake を直接使うのではなく xmkmf を実行することになるでしょう。 xmkmf は imake を実行するためのシェルスクリプトであり、 フロントエンドです。個別のインストールの際の具体的な作業については、ソ フトウェアアーカイブに入っている README や INSTALL という名前の ファイルをチェックしてください。(ソースファイルを展開した後に、メイン のディレクトリに Imakefile ができていれば、xmkmf を 使うはずだという動かぬ証拠になります。) imakexmkmf の細かい動作については man ページを読んでください。

xmkmfmake は root で実行することが必要な場合があ ることに注意してください。特に、make install を実行して /usr/bin/usr/local/bin ディレクトリにバイナリ ファイルを移動させる場合はそうです。root 権限を持たない普通のユーザに はシステムディレクトリへの書き込み権限がないので、make を使用するとお そらく書き込み拒否のエラー(write access denied)が出るでしょう。 また、バイナリファイルの実行許可が適切なユーザに与えられているかどうか も確認してください。

xmkmfImakefile を使って、システムに合った Makefile を新しく作ります。通常は -a オプションを付 けて xmkmf を実行し、 make Makefiles, make includes, make depend を自動的に行わせます。 これにより変数の設定や、コンパイラやリンカに与えるライブラリの位置の 定義が行われます。場合によっては、Imakefile がなく、 その代わりに同様の設定を行うための INSTALL スクリプトや configure スクリプトが付いていることもあります。この際の注意 ですが、configure を実行する場合には、確実にカレントディレクトリ の configure スクリプトを実行するために ./configure として実行すべきです。大抵の場合、インストールの手順を説明した READMEファイルがパッケージに入っています。

xmkmf や何らかのインストールスクリプトが作成した Makefile を実際に見て詳しく点検するとよいでしょう。 Makefile は通常、あなたのシステムに合わせて正しく設定されているはずで すが、時として手作業で Makefile を「いじったり」、間違いを直す必要に迫 られることがあります。

できたてのバイナリを適切なシステムディレクトリにインストールするには、 普通は root になって make install します。最近のディストリビューション では、システム全体で使うバイナリを置くための一般的なディレクトリは /usr/bin, /usr/X11R6/bin, /usr/local/bin で す。新しいパッケージを入れるのに適切なディレクトリは /usr/local/bin で、そうしておけば新しく入れた部分と元々 Linux にインストールされてい た部分を分けておけます。

もともと商用 UNIX 用を対象にしていたパッケージは、/opt 等の見 慣れないディレクトリにインストールしようとするかもしれません。もちろん、 インストール先のディレクトリが存在していなければ、エラーになります。 これを回避する最も簡単な方法は、root になって /opt ディレクトリ を作って、そこにパッケージをインストールし、PATH 環境変数に そのディレクトリを追加することです。別のやり方としては、 /usr/local/bin にシンボリックリンクを張ってもかまいません。

したがって、一般的なインストールの手順は以下のようになります:

  • README ファイルや他の適当なドキュメントを読みます。
  • xmkmf -a または INSTALLconfigure といったスクリプトを実行します。
  • Makefile をチェックします。
  • 必要に応じて、make clean, make Makefiles, make includes, make depend を実行します。
  • make を実行します。
  • ファイルのパーミッションを確認します。
  • 必要なら make install を実行します。

注意:

  • 普通は、パッケージを root ユーザでコンパイルしてはいけません。 su して root する必要があるのは、コンパイルが終わったバイナリ をシステムディレクトリにインストールするときだけです。
  • makeとその使い方に慣れたら、インストールしようとしてい るパッケージに含まれている、あるいはパッケージが自動的に生成する標準の Makefile に手を入れて、gcc に渡す最適化オプションを 追加するといいでしょう。こういったオプションでよく使われるのは、 -O2, -fomit-frame-pointer, -funroll-loops, -mpentium(Pentium を使っている場合)です。Makefile をいじる時は、用心と常識を忘れないように!
  • make でバイナリを作った後は、バイナリに対して strip を実行するとよいでしょう。strip コマンドは バイナリからデバッグ用のシンボル情報を取り除いてサイズを小さくします。 劇的に小さくなることもよくあります。これを実行すると、当然ながらデバッ グには使えなくなります。
  • Pack Distribution Project は、先程までの説明とは別のアプローチでソフトウェアパッケージ のアーカイブを作れるようにしようとしています。このアプローチは、ばらば らのコレクションディレクトリにインストールされたファイルへの シンボリックリンクを Python スクリプト群を使って管理するというものです。 このアプローチでもアーカイブは tarball ですが、これらは /coll ディレクトリや /pack ディレクトリに インストールされます。これらのディストリビューションのどれかをちょっと 試してみるにも、パックコレクション(Pack-Collection)を上記の サイトから入手する必要があるでしょう。


次のページ 前のページ 目次へ

[