web-dev-qa-db-ja.com

メイクファイルを学ぶことはどれほど重要ですか?

私は主に趣味としてc ++で働いています(私はまだ学校にいるので、実際の仕事はありません)。 IDEは私のためにmakefileを生成するので、自分で作成する方法を学ぶ価値があるかどうか疑問に思っています。 「学ぶ価値がある」とは、c ++の学習を続ける前に、すべてを落として、それらの書き方を学ぶべきなのでしょうか。それらを学ぶことは本当に必要でしょうか?もしそうなら、私はそれらについて学ぶべきですか(一般的な構文とそれらがどのように機能するかを理解するなど)、それともそれらを書く方法を本当に学ぶべきですか?

12
sinθ

はい、Makefileの仕組みを理解することは間違いありません。現時点では関係ないかもしれませんが(それらを生成するIDEを使用しているため)、その知識は将来的に役立つ可能性があります。

「学ぶ価値がある」とは、c ++の学習を続ける前に、すべてを落として、それらの書き方を学ぶべきなのでしょうか。

率直に言って、それは「学ぶ価値がある」という奇妙な概念です...

しかし、私はあなたがそれをする必要があるとは思いません。

それらを学ぶことは本当に必要でしょうか?

今後、この知識が本当に必要になるかどうかは予測できません。それは、C++プログラミングを続けるかどうか、およびどのコンテキストで行うかによって異なります。

もしそうなら、私はそれらについて学ぶべきですか?

私は両方をお勧めします。 Makefileを作成できない場合は、何が起こっているのかを知っているかどうかは議論の余地があります。

知識が多すぎても役に立たないという見方もある。

これについて深く理解すると、Makeにはさまざまなバージョンがあり、複数のプラットフォームで複数のバージョンのMakeを使用する複雑なMakefileを作成するのは難しいことを理解します。ただし、オープンソースの世界では、automakeautoconfなどのツールを使用してメイクファイルなどを生成することが「ベストプラクティス」です。これを行うと、多くのバージョン/プラットフォーム関連の複雑さは裏で処理されます。


最後に、質問に「Java」のタグを付けました。私の見解では、makeを使用してJavaアプリケーションを構築しないでください(ネイティブコードライブラリも構築している場合を除く)。 Java固有のビルドツールがあり、使いやすく、makeよりも優れています。

14
Stephen C

オープンソースまたはUnixライクなオペレーティングシステムを使用している場合は、そうです。心に留めておいてください。それらはそれほど複雑ではありません。 makeを学ぶことで、長期的には多くの時間を節約できます。

8
EhevuTov

メイクファイルは、UNIXシステム(AIX、Linux、OS Xなど)では重要です。しかし、彼らの絶対的な「あなたはそれを知るべきだ」という重要性は、近年減少していると思います。たとえば、Windows開発(Visual Studioなど)でそれらを実際に見つけることはなく、XCode(OS X)は完全に異なるシステムを使用します。私はJavaにはあまり詳しくありませんが、そこにはantファイルなどを使用していると思います。

CMakeと呼ばれる非常に優れたシステムがあり、たまたま実行しているオペレーティングシステムのネイティブビルドファイルを生成します。たとえば、プロジェクト仕様をCMakeで作成すると、WindowsではVisual Studioビルドプロジェクト、MacではXCodeプロジェクト、LinuxではMakefileを作成できます。ある意味で、CMakeはautoconfとautomakeを置き換えます。

私は通常、「大きなプロジェクト」用のCMakeファイルを作成しますが、簡単な「ただ完成させる」Makefileを作成したい場合のために、Makeを知っています。 Makefileを使用するソフトウェアライブラリは膨大にあり、特定のコンパイラとライブラリの場所を編集する必要があるため、文化的リテラシーに適しています。ただし、Makeにはプロジェクトが複雑になったときに醜い頭を抱える制限があるため、大きなプロジェクト(KDEなど)がCMakeなどに移行していることがわかります。

3
Eric Brown

Makefileはひどいシステムだと思うので、私は偏見があります。既存のメイクファイルを変更できるように、一般的な構文を学ぶ必要があります。しかし、私はそれについてすべてを学ぶことも、ゼロから作ることも役に立たないと思います。

2
user2528

IDE出力の多くの側面と同様に、典型的な自動生成されたメイクファイルは、しばしば非効率的に構成されます。

適切なレベルの理解があれば、パフォーマンスを大幅に向上させることができます(ビルドの高速化など)。ただし、何が起こっているのかを本当に理解していないと、autogenで作成されたファイルをいじるときにFUBARになる可能性が高くなります。

何が起こっているのかを理解できるようにすることを強くお勧めします...その後、既存のものの編集を開始するか、独自のものを作成するかは、別の問題です。

2
Andrew

makeまたはそのようなものを正常に使用できると、「複数のモジュールで構成されるプログラムの部分間の依存関係をモデル化する方法を理解する」ボックスをチェックできます。

2
Blrfl

Makefileの書き方を学ぶことは、いくつかの理由で良い考えです。

  1. Makeは、ルールを介してコンポーネント間の依存関係をエンコードできる言語です。この方法でコードを書くことで多くの経験が得られ、プログラミング問題の解決を考えるためのツールが広がります。
  2. Makeで学ぶ原則は、JavaまたはRubyの世界でプログラミングを学ぶことを選択した場合に、Ant、Maven、およびRakeで使用できます。
  3. 多くのIDEには、ソフトウェアの構築に役立つ構成情報を運ぶマジックファイルがあります。私を信じないなら、IDEなしでソフトウェアをビルドするスクリプトを書いてみてください。独自のMakefileを作成すると、コード、ライブラリ、および環境変数間の依存関係に非常に気付くようになります。システムが大きくなると、これはシステムのデバッグに役立つツールになります。
1
Jay Godse

常に、使用しているビルドシステムを理解するようにしてください。

これは、すべてのビルドファイルを手動で作成できる必要があることを必ずしも意味しません。重要な部分は、プロジェクトに対してビルドシステムが何をしているかを理解し、小さなプロジェクトを手動でコンパイルする一般的な機能(「ターミナルでのコマンドの入力」など)を理解することです。

(単純な)Makefileを作成することが何が起こっているのかを理解するための最も簡単なステップだと思う傾向がありますが、物事を構築する方法を理解する他の方法があるかもしれません。

Makefileを学ぶ理由と時期

Windowsのみのプログラミングを続け、他の誰かがコードをコンパイルすることを期待しない場合は、自由にコードをコンパイルしてください。

コンパイラにとらわれずにプログラミングしたい場合(「他の人がどのコンパイラを使用するかIDE使用したいかを決定させる」など)の場合は、IDE "それに対処する"。

異なるプラットフォーム用にプログラミングしたい場合は、広範なビルドシステムを使用する必要があります。

それでも、自動生成されたMakefileがどのように機能するかを詳しく知る必要があるわけではありません。ビルドシステムの入力ファイルがどのように機能するかを知っている必要があります。これらは、たまたま同じような構文を持つことがあります。


私は個人的にMakefileが本当に好きで、多くのものに使用しています。コードをコンパイルするだけではありません。 (LaTeXを使用して)作成するすべてのより大きなpdfと、いくつかのタスク(ビルド、パッケージ化、アップロード、ソースリポジトリからの依存関係の更新、手動バックアップのプル/プッシュ)を自動化する必要があるすべてのプロジェクトのMakefileを作成します

しかし、私はターミナルで多くの作業をしており、Linuxで作業しています。 IDE vim(強力なテキストエディター)とコンソールツール以外)は使用しません。

"update"/package/upload/.. a "project"だけにさまざまなコマンドを繰り返し実行する必要があると不満を感じた場合は、Makefileの書き方を学ぶと役立つでしょう。

ツール/ GUI/IDEをすべて使用している場合、その知識から何も得られない可能性があります。

0
JonnyJD