2017年5月16日火曜日

makeで通常コンパイル

■便利な機能

 Unix(Linux)上でコンパイルするときに、makeのデフォルトルールの機能を使って簡単にコンパイルできることを知りました。例えば、「hello.cppをコンパイルして、helloという実行ファイルを作りたい」ときは、「make hello」とすればよいです。 Makefileは要りません。

コンパイルして、実行ファイルを作る様子

 上記の実行例を見ると、Makefileもないのに、g++でコンパイル(&リンク)しているのがわかります。


■気づいた経緯


 学生実験で、学生さんが、分割コンパイルすべきところを「コンパイル&リンク」する間違いを発見しました。コンパイルの仕方を勘違いしているのだと思ったら、Makefileにルールを追記をせずにコンパイルしていることが原因と分かりました。Makefileに追記せずにコンパイルできると思わなかったので、意外でした。

■仕組み

 makeコマンドは、多くのデフォルトルールが存在しています。「*.cpp」から「*.o」を作るときは、「g++の-cオプションを付けてコンパイルする」などのルールを持っています。デフォルトルールがあるおかげで、Makefileの記述を簡潔にできます。

 そして、今回気づいたのですが、カレントディレクトリにMakefileがない時も、デフォルトルールは健在で、makeでコンパイルできるようです。「make ○○」 とするだけで、C言語のソースファイルもC++言語のソースファイルもコンパイルできます。これはかなり便利かもしれません。

ubuntsuのmake(おそらくGNU make)だけの機能かもしれませんので、使う場合はお気を付けください。

0 件のコメント:

コメントを投稿