ホーム / Makefiles: それとは何で、それを使えるのは何ですか?

Makefiles: それとは何で、それを使えるのは何ですか?

2024/12/03 2:01:17
Makefilesは、コンパイルやリンクなどのタスクを自動化するプログラムで、依存関係に基づいて効率的にビルドします。空白やタブの注意が必要で、インデントはタブで行う必要があります。Makefileの例は、単一のソースファイルをコンパイルするためのものです。インストール方法は、Linuxではapt、macOSではhomebrewを使用します。
Makefiles: それとは何で、それを使えるのは何ですか?
速いリンク コンパイルとは何ですか? Makefilesは何をしますか? Makefilesの見た目は何ですか? 初めてのMakefileを書く Makeは何 ещёできますか? 重要なポイント Makefilesは、Makeによって使用され、Makefilesを介してコードを効率的にコンパイルします。Makefilesはタブを使用してインデントし、スペースではなく、スペースに注意してください。Makefilesを操作する際には空白に注意してください。ソースコードからソフトウェアをインストールした場合、おそらくMakeを使用してきました。しかし、このプログラムとは何で、どのように動作するのでしょうか?Makefileについて学び、それがどのようにビルドプロセスを革命化できるかを詳しく解説します。コンテンツ内でのネイティブゾーン用の勝利する広告が見つかりません!

コンパイルとは何ですか?

Makefilesとコンパイルは密接に関連しています。コンパイルだけでなく、Makeプログラムはコンパイルが引き起こす不満から生まれました。コンパイルはソースファイルを別の形式に変換します。古典的な例は、.c ファイルが .o オブジェクトファイルにコンパイルされることです。C プログラムはまた、.o ファイルを最終的な実行ファイルに変換するリンクプロセスを経ます。実際には、C プロジェクトを構築するには以下の4つの独立した段階が含まれています。コンパイルは1970年代初頭にC言語の開発によって普及しましたが、TypeScript、Rust、Sassなどの新しい言語も使用しています。代替手段は解釈です。解釈は、独立した実行ファイルを生成するのではなく、中間プログラムを使用してコードを実行します。解釈言語にはJavaScript、Python、Rubyが含まれます。コンパイルされたプログラムは、一般的に解釈されたプログラムよりも速く動作します。また、コンパイルは、実行時にしか検出できない特定の種類のエラーをコードにチェックするため、コンパイルされたプログラムが正しいことを確認するのが容易になります。しかし、コンパイルは特に数百か数千のソースファイルを持つプロジェクトでは時間がかかることがあります。

Makefile が何をするか

Makefilesは、Makeによって使用されるプログラムで、ビルドプロセスを自動化します。これには、コンパイルなどのタスクが含まれます。akeコマンドを実行すると、デフォルトでMakefileまたはmakefileというファイルを探します。このファイルには、プログラムの各ファイルをコンパイル(またはビルド)する方法に関する指示が含まれている必要があります。Makefilesは「依存関係」(または「前提条件」)という概念に基づいて構築されています。Makeはファイルのタイムスタンプを使用して依存関係をチェックします。これにより、Makeはコンパイルを大幅に加速できます。各ソースファイルを再コンパイルするのではなく、Makeは最小限に必要な部分のみを再構築します。一般的には、ソースファイルが変更された場合、Makeはそれを再コンパイルし、そうでない場合はそのままにします。

Makefileの見た目は何ですか?

akefilesについて最初に知っておくべきことは、空白が重要であるということです。これは一般的に悪い設計決定と見なられていますが、私たちには変えられない状況なので注意してください!Makefileには、各コンポーネントを構築する方法を説明する一連のルールが含まれています。ルールの一般的なパターンは以下のようになります。ターゲット: 依存関係 アクション

これが、実行可能ファイルに単一のソースファイルをコンパイルするための最も単純なmakefileです。

プログラム: program.c gcc -o program program.c このmakefileの第二行はインデントされています。インデントは必ずタブ文字で行う必要があります。makefileをコピー&ペーストしたり、手動で作成したりする場合、インデント行の最初に必ずタブ文字を1つ保持してください。たとえば、タブの代わりに4つのスペースを使用すると、"Makefile:2: *** missing separator. Stop."というエラーが表示されます。この例では、ターゲットは最終実行ファイルの名前です: program。ターゲットはファイル名と一致する必要はありませんが、通常は一致します。このターゲットの依存関係は単に "program.c" だけです。Make はこれを使用して何をすべきかを決定します。"program" ファイルが "program.c" より新しい場合、Make は何もしません。

初めての Makefile を書く

手動操作の経験は何事にも代えられず、幸いにも、Makeは最もシンプルな形で使用するのが比較的簡単です。

Make のインストール

Linuxディストリビューション(例えばUbuntu、Mint、Debianなど)でaptを使用している場合、Makeをインストールする方法は以下の通りです。bash sudo apt install makeacOSでMakeをインストールするには、以下のコマンドを実行します。「xcode-select --install」代わりに、homebrewがインストールされている場合は、以下のコマンドを実行します。brew install make` `make: command not found`というエラーが表示される場合、`make`プログラムがPATHにインストールされていないことを意味します。これの問題を解決するには、正しくインストールされていることを確認してください。

簡単なテストプログラムを書く

上記のmakefileを簡単なCプログラムでテストすることで、Makeを実際に見ることができます。これを行うには、gccとmakeがインストールされている必要があります。「program.c」という名前のファイルを作成し、以下の内容でそれを埋めます。#includeint main(){    printf("Hello, world.\n");}

At this point, test your program is correct (and that you have gcc installed) by running the following:

gcc -o program program.c

Confirm that gcc successfully builds the program, then remove it:

rm program

Write the Basic Makefile

Now create the example makefile (as either "Makefile" or "makefile") with the following contents:

program: program.c    gcc -o program program.c

Run Make

In your terminal, ensure your working directory contains the Makefile and program.c files, then run Make:

make

Once you've confirmed that Make compiled and built your program, test its behavior by running it again:

make

Make tells you that everything is up-to-date, so it doesn't actually do anything now. This is one of Make's biggest benefits: it will only spend time building components that need to be rebuilt. Try updating your source file and you'll see the difference:

touch program.cmake The touch command here just updates the file's modified time to the current time. This is just a quick way of "tricking" Make into thinking the file has changed.

What Else Can Make Do?

Make is only really limited by its file-based nature. Any file can be a part of your build process and act as a target or dependency.

This means that Make is appropriate for a wide range of projects. Anything with predictable, repeatable build steps is suitable.

For example, take a static site generator that generates web pages from other sources, often including Markdown text files. This makefile will rebuild a specific web page:

index.html: index.md    pandoc index.md index.html

We've only touched the surface of what Make can do here. In reality, makefiles contain patterns to define rules for many different files, creating complex dependency chains.

Next time you build software, see if there's a makefile and try exploring its contents. Hopefully, you can understand some of the basics and recognize some of what's going on under the hood. With the GNU make manual in hand, you can start using Make for your own projects to avoid unnecessary downtime.