0基本フォーマット
目標:依存
(タブ)命令
1変数
変数の定義:objects = main.o command.o utils.o
変数の使用法:$(objects)
2誤ったターゲット
.PHONY : clean // .PHONY表示 clean为伪目标
clean :
-rm edit $(objects) //"-"表示:也许某些文件出现问题,但不要管,继续做后面的事
通常の状況では、疑似ターゲットは別のターゲットに依存していません。ただし、疑似ターゲットがターゲットの
依存関係である場合、そのコマンド本体が適用されます。
例:FORCE
3 指定特定的 Makefile
Makefileを使用することをお勧めしますが、Makefileは使用しないでください。
特定のMakefileを指定する場合:make
の
「-f」および「-file」パラメーターを使用します。たとえば、make -fMake.Linuxまたはmake--fileMake.AIXです。
4Makeのワークフロー
GUNmakeの実行プロセスは2つの段階に分かれています。
- 最初の段階:すべてのmakefileファイル、組み込みのすべての変数、明示的なルールと暗黙的なルールを読み取り
、すべてのターゲットと依存関係の間の依存関係の構造的にリンクされたリストを確立します。
- 変数「MAKEFILES」で定義されているメイクファイルのリストを1つずつ読んでください。
- 作業ディレクトリでmakefileを読み取り、ファイル名に従って順番に検索します:GNUmakefile、
makefile、Makefile、最初に見つかった方を読み取ります。 - 作業ディレクトリのmakefileに含まれているファイルを、「include」インジケータを順番に付けて読み取ります。
- メイクファイルのすべてのルールが読み取られていることを再構築します(ターゲット(ターゲット)がある場合
は、読み取り前にメイクファイルの1つが実行されると、このルールが実行されます。このメイクファイルファイルを再構築して
、からの再実行の最初のステップを完了します。初め)。 - 変数値を初期化し、すぐに展開する必要がある変数と関数を展開し、事前設定された条件に従って
分岐します。
- 第2段階:依存構造のリンクリストと第1段階
で確立された最終ターゲットに従って、更新する必要のあるターゲットを決定し、対応するルールを使用してこれらのターゲットを再構築します。
- 最終目標(デフォルトまたは指定)と依存関係に基づいて、依存関係リストを再帰的に作成します。
- 最終目標の依存関係リストの実行(依存関係リストを確立する逆の順序)。
- 最終的な目標がある場所でルールを実行します。
5隠れたルールと隠れた変数を表示する
ファイルへの出力、ルール、変数が多すぎます。
make -p -f /dev/null | >> file
長い間CURDIRをチェックした後、MAKE変数がついに見つかりました
# environment
GDMSESSION = ubuntu
# environment
XMODIFIERS = @im=ibus
# makefile
CURDIR := /home/hedy/u-boot
# makefile
SHELL = /bin/sh
# environment
NM = arm-poky-linux-gnueabi-nm
...
# default
MAKE = $(MAKE_COMMAND)
...
# default
MAKE_COMMAND = make
5モードルール
ARCH := $(CONFIG_SYS_ARCH:"%"=%)
CPU := $(CONFIG_SYS_CPU:"%"=%)
: "%" =%は、変数CONFIG_SYS_ARCHの引用符 ""を削除することを意味します。