メイクファイルを学ぶことはどれほど重要ですか?[閉まっている]


12

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


1
ほとんどのオープンソースプロジェクトは、何らかの方法でmakefileを多用しています。ですから、はい、メイクファイルの仕組みを学ぶ必要があります。手で書くことは別の話であり、ファイルが非常に少ないか、汎用/暗黙のルールおよびその他の同様の手法を使用できる場合を除き、いくつかのツールで生成するよりも避けるべきです
-permeakra

Linuxや他のUnixベースのオペレーティングシステムでソースをコンパイルしたい場合は、それらを学ぶ必要があります。

メイクファイル、依存関係、置換などの基本を学ぶことができ、この質問に対するすべての答えを読むのにかかる時間は短くなります:)
JohnB

回答:


14

はい、Makefileがどのように機能するかを理解する価値があります。現時点では関係ないかもしれません(それらを生成するIDEを使用しているため)が、その知識は将来役に立つ可能性があります。

「価値のある学習」とは、C ++を学習し続ける前に、すべてを落とし、それらの書き方を学ぶ必要があるということです。

率直に言って、それは「価値ある学習」の奇妙な概念です...

しかし、私はあなたがそうする必要はないと思います。

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

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

もしそうなら、それらについて(一般的な構文とそれらがどのように機能するかを理解するなど)学ぶべきか、実際にそれらを書く方法を学ぶべきですか?

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

あまりにも多くの知識は役に立たないと言う他の視点があります。

これを深く理解すると、Makeにはさまざまなバージョンがあり、複数のプラットフォームで複数のバージョンのMakeで動作する複雑なMakefileを書くのが難しいことがわかります。しかし、オープンソースの世界では、次のようなツールを使用するための「ベストプラクティス」であるautomakeautoconfなどなどmakefileを生成するのを、あなたはそれを行う場合は、バージョン/プラットフォーム関連の複雑さの多くは、舞台裏で扱われます。


最後に、質問に「java」というタグを付けました。私の考えでは、makeJavaアプリケーションをビルドするために使用すべきではありません(ネイティブコードライブラリもビルドしている場合を除く)。はるかに使いやすいJava固有のビルドツールがあり、...よりも優れた仕事をしmakeます。


8

オープンソースまたはUnixライクなオペレーティングシステムで作業している場合は、はい。でも気をつけてください、彼らはそれほど複雑ではありません。学習makeすることで、長い目で見れば時間を大幅に節約できます。


読むことを学ぶのか、書くことを学ぶのか?

どちらも。使用するソフトウェアの問題をデバッグできるようにするための読み方を知りたい、または独自のソフトウェアを作成できるように書く必要があります。
-EhevuTov

それから、筆記部分に反対しなければなりません。ビルドを自動化する方法は他にもたくさんあります-間違いなくはるかに良い方法です。実際に役立つメイクファイルを書くことは簡単なことではなく、必要ありません。

3

メイクファイルは、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などに移行していることがわかります。


CMakeの学習は、桁違いに有益です。メイクファイルは実装の詳細と見なすことができます-Visual Studioプロジェクトファイルと同様に、(実際に強制されるまで)学習する必要はありません。

2

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


メイクファイルがひどいシステムである理由を説明することに注意してください。何と比較して?
ジョニーJD

@JonnyJD:一つのことは、良いビルドシステムでは各サブディレクトリにメイクファイルを置くべきだとは思わないということです。しかし、悪いことは、実際に何かを言っているbatファイルを書くよりも使いにくいからです。

手作業でビルドファイルを生成するのが嫌いなようです。それ自体は大したことではありません。Makefileは、手動で読み取りおよび書き込みが可能なバリアントです。(モジュール化され、bash / batと比較して依存関係の追跡を単純化した)自動化された部分はautomakeです。実際に大きく異なる唯一のことは、GUIで依存関係を指定し、このすべてを1つのプロジェクトファイルに保存することです。または、どのビルドシステムがそれほどひどくないですか?
JonnyJD

2

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

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

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


2

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


1

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

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

0

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

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

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

Makefileを学ぶ理由/タイミング

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

コンパイラにとらわれない(「他の人が使用するコンパイラまたはIDEを他の人に決定させる」など)をプログラムする場合は、IDEに「対処する」だけでなく、別のビルドシステムを学習する必要があります。

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

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


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

しかし、私は端末で多くの作業をしており、Linuxで作業しています。vim(強力なテキストエディター)とコンソールツール以外のIDEと呼ばれるものは使用しません。これはあなたにとって非常に異なるかもしれません。

「更新」/パッケージ/アップロード/ ...「プロジェクト」だけに別の繰り返しコマンドを実行する必要があると不平を言ったことがあるなら、Makefileの書き方を学ぶことはあなたにとって役に立つかもしれません。

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.