makeコマンドのちょっとしたtips

知っている人には当たり前。でも新人さんには覚えておいて欲しい。

コンパイルエラーがあっても止まらずにコンパイルできるところまでコンパイルする

  $ make -k

普通にオプション無しでmakeコマンドをたたくとビルドが無事終了するか、エラーが発生したところで止まります。ひとつひとつエラーを取り除いていってもいいのですが、いったいどのくらいのエラーがあるのかを見極めるために、 -k オプションをつけてビルドを実行します。そうするとコンパイルエラーがあっても止まらずにコンパイルできるところまでコンパイルしてくれます。数個のエラーなのか、何百のエラーなのかで次の作業をどうするかを作戦を立てていきます。たくさんエラーがあっても同じ原因であることもあるし。(例えば何かヘッダファイルが見つからないなど。)
あまりにたくさんのエラーがあるなら、もっと違ったアプローチをすることも考えらます。
とりあえずビルドの作業規模がおおまかに見通せるのがいい。

makeした時にどんなコマンドが実行されるのか調べる

 $ make -n

このオプションでは実際にはmakeを実行せずに、実行されるコマンドが表示だけされます。

 $ make -n install

とすれば、いったいどこに何がインストールされるのかを確認することができます。
インストールは普通root の権限で行うのでうっかりミスを防ぐためにも確認をしておきたい。

makeしたときのログをファイルに残す

これは実際にはmakeでなくてshellの機能。
標準出力と標準エラー出力を一緒にパイプに出してteeコマンドで画面に表示しつつファイルにも保存なら

 $make 2>&1 | tee make.log

makeのログを残しておくことはぜひ習慣にしておきたいものです。エラーになったときはもちろんのこと、正常にビルドできたときのログも残しておくと後でビルドの環境を確認したり、後でエラーになったときに、正常なときと何が違うのか比較することもでき、問題解決の早道になることがあります。

makeの並列処理

デュアルコア以上の開発マシンでmake するときには -jオプションで並列実行するジョブの個数を指定すると、make にかかる時間を短縮できます。

 $make -j4

私の経験では実CPUの個数分と同じ個数のジョブを指定するのがよいようです。つまりデュアルコアなら -j2 クアッドコアなら -j4 。-j4の場合、何も指定しない場合に比べて1/3 の時間でmakeが終了したりするので効果はとても高いです。
ただしこれは Makefile の中でファイルの依存関係が適切に書かれていないと誤動作します。また、ログの順番が入り乱れるので、正常終了するとわかっているmakeの実行のときだけにとどめておくほうがよいかも。