シンプルで理解しやすいMakefileエントリ(09)-インクルードファイルには、MAKECMDGOALSが含まれています

1.インクルードファイルには

場合はmake、読み取りincludeキーときには、電流を読み取るために一時停止しますMakefileが、読み取ることがinclude含まれているファイルを、その後の終了後、現在の読書を読んでMakefileファイル。

include 使用される具体的な方法は次のとおりです。

include <filenames>

filenamesされたshellファイル名でサポートされている(あなたが示されたワイルドカードのファイルを使用することができます)。

注:includeキーワードに1つ以上のスペースが含まれている可能性がある行先頭(読み取り時のスペースは自動的に無視されます)が、Tab開始に使用することはできません。それ以外の場合はinclude、処理するコマンドを入力したと見なされます。
複数のファイルを区切るにはスペースを使用します。ファイルincludeにそれ含めるを使用Makefileます。変数または関数への参照がある場合、それらはMakefileデプロイメントに含まれます。

include 通常、次の場合に使用されます。

  • プロジェクトファイルでは、それぞれにMakefile再構築ルールを記述するための個別のモジュールがあります。共通の変数定義またはパターンルールのセットを定義する必要があります。一般的な方法は、これらの変数またはルールで一般的に使用される定義をファイルでモデル化し、必要に応じてincludeこのファイルを含めることです。
  • ソースファイルに基づいて依存関係ファイルが自動的に生成される場合、自動生成された依存関係を別のファイルに保存できます。次にMakefile、このファイルを含めます。

注:includeファイルを含む時間を使用する場合は、ファイルの絶対パスがファイルではないか、現在のファイルの下にファイルされないようmakeに指定します。ファイル名の次のパスで検索されます。

  • まず、makeコマンドオプションを追加できる場合、-Iまたは--include-dir後で指定したパスを追加できる場合に実行します。ファイルが存在する場合は、そのパスが使用されます。
  • ファイルが存在しない場合、それはいくつかの他のパスに検索します。usr/local/includeそしてusr/include

上記でinclude指定したファイルにパスが見つからない場合はmake、警告プロンプトファイルが見つからないというプロンプトが表示されますが、終了しませんが、引き続きMakefileコンテンツ追跡します。

Makefile投稿全体を読み終えると、指定makeされincludeたファイルによって作成されルールを使用しようとしますが、存在しません。作成できない場合は、ファイルを保存して終了します。

使用する場合、通常-includeincludeエラーを置き換えてファイルを無視するには、次の形式を使用して、ファイルが存在しないか、作成できません。

-include <filename>

そして、include同じ方法の使用

これら2つの方法の違い:

  • include <filenames>makeプログラムを処理する場合、ファイルリスト内のファイルが存在しないか、このファイルを作成するルールがない場合make、プログラムはエラーを保存して終了します。
  • -include <filenames>、含まれているファイルが存在しない場合、またはファイルを作成するルールがない場合、makeプログラムは実行を継続し、再構築の最終目標を完了できない場合にのみ、プログラムは保存して終了するエラーを表示します。

2.使用例

ディレクトリ構造は次のとおりです。

wohu@ubuntu:~/cpp/func$ ls
common_variable  demo.cpp  demo.h  Makefile

common_variable 内容は以下の通りです。

a = 11
b = 22
c = 33

Makefile 内容は以下の通りです。

include common_variable
all:
	echo $(a) $(b) $(c)

makeを実行した後

wohu@ubuntu:~/cpp/func$ make
echo 11 22 33
11 22 33
wohu@ubuntu:~/cpp/func$ 

3. MAKECMDGOALS

make実行中に、MAKECMDGOALSコマンドラインパラメータで指定された最終目標のリストを記録する特別な変数が設定されます。パラメータで最終目標が指定されていない場合、この変数は空になります。

ifeq ($(MAKECMDGOALS), aa cc)
obj = aa cc
else ifeq ($(MAKECMDGOALS), bb)
obj = bb
else
obj = other
endif

aa:
	@echo $(obj)
bb:
	@echo $(obj)
cc:
	@echo $(obj)
other:
	@echo $(obj)

実行make結果

wohu@ubuntu:~/cpp/func$ make aa cc
aa cc
aa cc
wohu@ubuntu:~/cpp/func$ make aa
other
wohu@ubuntu:~/cpp/func$ make bb
bb
wohu@ubuntu:~/cpp/func$ make cc
other
wohu@ubuntu:~/cpp/func$ 

おすすめ

転載: blog.csdn.net/wohu1104/article/details/111085894