Makefile作成
makefileファイルの使い方 makefileルール makefile実行原理 makefileカスタム変数 makefile自動変数(コマンドでのみ使用可能) makefileマッチングモード makefile共通関数 makefileクリーンアッププロジェクト makefileルール
ターゲット:依存(tab)コマンド
makefile実行原理
例1:
makefileファイルの最初のルールは、makefileが実行可能なファイルを構築する究極の目標です.ルール内の依存が存在しない場合は、依存を生成するルールがあるかどうかを下にクエリーして実行します.ルールを実行すると、ターゲットと依存時間が比較されます.依存の変更時間がターゲットの時間より遅い場合、ターゲットが再生成されます.すなわち、依存ファイルが変更された場合、ターゲットが再生成される.
makefileカスタム変数
構文:obj=main.o add.o sub.o target=app説明:makefile内蔵変数はすべて大文字で、カスタム変数は小文字を使用します.変数の値を取得:$(obj)
makefile自動変数(コマンドでのみ使用可能)
$@:ルール内のターゲットを表します$^:ルール内のすべての依存を表します
makefileマッチングモード
例:o:%.c:ターゲットと依存をマッチングします.
例1をカスタム変数、自動変数、およびマッチングモードを使用する形式に変更します.
説明:一致モードはワイルドカードに基づいて置き換えられ、実行されます.例えばaddに遭遇する.o存在しない.add.oマッチングできます.addに相当する.o:add.c gcc add.c -c -o add.oのルール
makefile常用関数
1、パスの下のファイル名を取得する:src=$(wildcardディレクトリ/ファイル名)例えば:src=$(wildcard./*.c)現在のディレクトリのすべての「.c」ファイル2、文字列置換obj=$(patsubst%.c,%.o,$(src))src変数のすべての「.c」ファイルを「.o」ファイルに置き換えます.
再改造例1:
makefileクリーンアッププロジェクト
クリーンアップルールclean:rm*を作成します.o app使用:make cleanの欠点:現在のディレクトリにcleanというファイルがある場合、cleanルールの実行に影響します.makeコマンドはcleanファイルの時間をチェックするので、cleanが最新だと思います.cleanルールが実行できなくなります.
解決方法:cleanルールを擬似ルール擬似ルールとして宣言:ディレクトリ内の同名ファイルと時間的に比較することなく、重複するファイルとルールターゲットの重複時の構築問題を防止します.
.PHONY:ルールターゲット(手前に「.」)例:PHONY:clean
ターゲット:依存(tab)コマンド
makefile実行原理
例1:
app:add.o main.o sub.o
gcc add.o main.o sub.o -o app
add.o:add.c
gcc add.c -c
main.o:main.c
gcc main.c -c
sub.o:sub.c
gcc sub.c -c
makefileファイルの最初のルールは、makefileが実行可能なファイルを構築する究極の目標です.ルール内の依存が存在しない場合は、依存を生成するルールがあるかどうかを下にクエリーして実行します.ルールを実行すると、ターゲットと依存時間が比較されます.依存の変更時間がターゲットの時間より遅い場合、ターゲットが再生成されます.すなわち、依存ファイルが変更された場合、ターゲットが再生成される.
makefileカスタム変数
構文:obj=main.o add.o sub.o target=app説明:makefile内蔵変数はすべて大文字で、カスタム変数は小文字を使用します.変数の値を取得:$(obj)
makefile自動変数(コマンドでのみ使用可能)
$@:ルール内のターゲットを表します$^:ルール内のすべての依存を表します
makefileマッチングモード
例:o:%.c:ターゲットと依存をマッチングします.
例1をカスタム変数、自動変数、およびマッチングモードを使用する形式に変更します.
obj = main.o add.o sub.o
target = app
$(target):$(obj)
gcc $(obj) -o $(target)
%.o:%.c
gcc $< -c -o $@
説明:一致モードはワイルドカードに基づいて置き換えられ、実行されます.例えばaddに遭遇する.o存在しない.add.oマッチングできます.addに相当する.o:add.c gcc add.c -c -o add.oのルール
makefile常用関数
1、パスの下のファイル名を取得する:src=$(wildcardディレクトリ/ファイル名)例えば:src=$(wildcard./*.c)現在のディレクトリのすべての「.c」ファイル2、文字列置換obj=$(patsubst%.c,%.o,$(src))src変数のすべての「.c」ファイルを「.o」ファイルに置き換えます.
再改造例1:
src = $(wildcard ./*.c)
obj = $(patsubst %.c,%.o,$(src))
target = app
$(target):$(obj)
gcc $^ -o $@
%.o:%.c
gcc $< -c -o $@
makefileクリーンアッププロジェクト
クリーンアップルールclean:rm*を作成します.o app使用:make cleanの欠点:現在のディレクトリにcleanというファイルがある場合、cleanルールの実行に影響します.makeコマンドはcleanファイルの時間をチェックするので、cleanが最新だと思います.cleanルールが実行できなくなります.
解決方法:cleanルールを擬似ルール擬似ルールとして宣言:ディレクトリ内の同名ファイルと時間的に比較することなく、重複するファイルとルールターゲットの重複時の構築問題を防止します.
.PHONY:ルールターゲット(手前に「.」)例:PHONY:clean