■便利な機能
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)だけの機能かもしれませんので、使う場合はお気を付けください。
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 件のコメント:
コメントを投稿