はじめに:
この章の主な内容は、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
Test
Test.c
Test
:
gcc Test.c -o Test
Test
test.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
装飾後はいつでも実行できます。
この記事はこれで終わりです、コードテキストは簡単ではありません、たくさんサポートしてください!