Linux: プロジェクト自動化ビルド ツール - make/Makefile

はじめに:
この章の主な内容は、Linux理解と学習環境でプロジェクト自動化構築ツールを使用する方法ですmake/makefile

1. makeとMakefileの関係

より大規模なソフトウェア プロジェクトを作成する場合、通常は複数のソース ファイルを実行可能プログラムまたはライブラリ ファイルにコンパイルする必要があります。makeこのプロセスを簡素化するために、ツールとファイルを使用できますMakefileファイルはソフトウェア プロジェクトの構築と管理を自動化し、効率と信頼性を高めるのにMakefile役立ちます。また、ツールはさまざまなオペレーティング システムやコンパイラで実行できるため、クロスプラットフォームでもあります。make

1.メイクファイル

Makefileファイルには一連のルールが含まれており、各ルールはソース ファイルからオブジェクト ファイルを生成する方法を記述します。各ルールでは、ターゲット ファイルとその依存関係を定義し、実行するコマンドを指定します。

例:

新しいファイルを作成しますMakefile

touch Makefile

ファイルを編集しますMakefile:

//vim进行编辑
vim Makefile
//写入内容
Test : Test.c
    gcc Test.c -o Test
//保存退出

このようにファイルが書き込まれるのですMakefileが、このように書くことにどのような意味があるのでしょうか?

実際、各ファイルの意味は最終ターゲット ファイルMakefile を生成することでありファイル内の最初のファイルが最終ターゲット ファイル (例のファイル) として認識されます。Makefile Test

この例では、ターゲット ファイルを生成するには、ファイルがコンパイルされた後にターゲット ファイルを生成するTest必要がありますしたがって、 と には、で示される依存関係があります。そして次の指示は、対象ファイルと needの関係を説明することですTest.c TestTest.cTest gcc Test.c -o TestTesttest.c

もちろん、依存関係が存在しない場合もあります。の目的はオブジェクト ファイルを生成することであるため make、どのような手段が使用されるか、オブジェクト ファイルがあるかどうかに関係なく、たとえば次のようになります。

//没有依赖关系的示例
Test : 
    touch Test

場合によっては、1 つの依存関係だけでは最終的なターゲット ファイルを生成できない場合があります。このときは、次のような複数の層の依存関係を確立する必要があります。

Test : test.o
   gcc test.o -o Test 
test.o : test.s
   gcc -c test.s -o test.o
test.s : test.i
   gcc -S test.i -o test.s
test.i : Test.c
   gcc -E Test.c -o test.i 

最終的なターゲット ファイルを生成するためにTest、システムは依存関係に従ってレイヤーごとに検索します。上の例のように、 を生成したい場合は をTest見つけなければなりませんしtest.o、生成したい場合は...test.oを生成する必要test.sがあります。 レイヤーごとに検索する場合、いずれかのプロセスに障害がある (目的のファイルの生成に失敗する) と、エラーが表示されます。

前の例の結果は次のようになります。make 命令の実行後Makefile 、最終的なターゲット ファイルが生成されるだけでなく、プロセス内のターゲット ファイルも生成されます。

ここに画像の説明を挿入
それが何であるかを理解した後、指示Makefileを見てみましょう。make

2.作る

makeそれは教えであり、Makefile仲間とともに生きます。

make コマンドを実行すると、make ツールはMakefileファイルを読み取り、そのルールに従ってターゲット ファイルを生成します。各ルールの依存関係とターゲット ファイルの最新の変更時刻をチェックして、どのルールを実行する必要があるかを決定します。

平たく言えば、効率を高めるために、システムは、生成されたターゲット ファイルまたは変更されていないターゲット ファイルを再コンパイルして再生成しません。

ソースファイルと実行ファイルの最新更新時刻をチェックして、コンパイルするかどうかを判断します。

makeディレクティブのみを入力すると、デフォルトで最終ターゲット ファイルになります。プロセス内でオブジェクト ファイルを生成したいだけの場合は、ファイル名を指定する必要があります。たとえば、以下を生成するだけですtest.o

Test : test.o
   gcc test.o -o Test 
test.o : test.s
   gcc -c test.s -o test.o
test.s : test.i
   gcc -S test.i -o test.s
test.i : Test.c
   gcc -E Test.c -o test.i 
make test.o

ここに画像の説明を挿入

2. プロジェクトのクリーンアップ

1.きれいにする

ではMakefile、通常、オブジェクト ファイルはcleanで追加および変更され.PHONY、その機能はプロジェクト ファイルをクリーンアップして生成することです。例えば:

Test : test.o
    gcc test.o -o Test 
test.o : test.s
    gcc -c test.s -o test.o
test.s : test.i
    gcc -S test.i -o test.s
test.i : Test.c
    gcc -E Test.c -o test.i
        
.PHONY : clean 
clean : 
    rm -f Test test.i test.s test.o  

2. .フォニー

装飾された.PHONY オブジェクトは常に実行されるように設計されています。たとえば、make test.oコマンドを実行した後は実行できますが、ターゲット ファイルがすでに存在しており最新であるため、2 回目からは機能しません。ただし、.PHONY装飾後はいつでも実行できます。

ここに画像の説明を挿入


この記事はこれで終わりです、コードテキストは簡単ではありません、たくさんサポートしてください!

おすすめ

転載: blog.csdn.net/weixin_67401157/article/details/131582761