プログラミングユーティリティ

make の実行に関する情報を表示する

-n オプションを使用して make を実行すると、make が実行するコマンドを実際には実行せずに表示だけを行います。このオプションは、メークファイルのマクロが意図しているとおりに展開されているかどうかを確認する際に便利です。以下のメークファイルを例に示します。

CFLAGS= -O 

.KEEP_STATE:

functions: main.o data.o 
         $(LINK.c) -o functions main.o data.o

make -n を実行すると、以下のように表示されます。

$ make -n 
cc -O -c main.c 
cc -O -c data.c 
cc -O -o functions main.o data.o

注 -

ただし、1 つ例外があります。MAKE マクロへの参照 ($(MAKE)${MAKE} など) を含むコマンド行は、make-n オプションを付けた場合にも実行されます。以下のような行をメークファイルに記述することは避けてください。

$(MAKE) ; rm -f *



注 -

MAKEFLAGS という環境変数を設定すると、その値が make オプションのリストに追加されるため、処理が複雑になる場合があります。混乱を防ぐために、この変数を設定することは避けてください。


make には、make の動作やその理由を確認できるオプションが他にもいくつかあります。

-d

ターゲットが最新でないと make が決定する条件を表示します。-n オプションとは異なり、以下の例のようにターゲットの処理は実行します。このオプションは、環境変数 (デフォルトでは NULL) から取り込んだ MAKEFLAGS マクロの値も表示します。MAKEFLAGS マクロについての詳細は、後述の節で説明しています。

$ make -d 
MAKEFLAGS value: 
    Building main.o using suffix rule for .c.o because 
it is out of date relative to main.c 
cc -O -c main.c 
    Building functions because it is out of date 
relative to main.o 
    Building data.o using suffix rule for .c.o because 
it is out of date relative to data.c 
cc -O -c data.c 
    Building functions because it is out of date 
relative to data.o 
cc -O -o functions main.o data.o
-dd

make が検査する、すべての依存関係 (隠れた依存関係も含む) を詳細に表示します。

-D

メークファイルのテキストをメークファイル読み取り時に表示します。

-DD

メークファイル、デフォルトのメークファイル、状態ファイル、実行中の make における隠れた依存関係を表示します。

-f makefile

make が (makefile または Makefile ではなく) makefile に指定した名前のメークファイルを使用します。


注 -

複数のメークファイルを指定するには、-f オプションをその数だけ指定します。指定したメークファイルは連結されて処理されます。


-K makestatefile

makestatefile がディレクトリの場合は、make はそのディレクトリ内の .make.state ファイルに KEEP_STATE の情報を書き込みます。makestatefile がファイルの場合は、makeKEEP_STATE 情報を makestatefile に書き込みます。

-p

すべてのマクロ定義およびターゲットのエントリを表示します。

-P

デフォルトのターゲットまたは指定したターゲットのすべての依存関係のツリーを表示します。

-t オプションを使用すると、make の処理を省略できます。-t を使用して make を実行すると、make はターゲットを構築する規則を実行しません。その代わりに touch を使用して、依存関係の検査で検出した各ターゲットの変更時間を更新します。また、構築したターゲットに応じて状態ファイルを更新します。ターゲットのエントリに対応するファイルがない場合は、touch によってファイルが作成されます。


注 -

副作用が生じる場合があるため、make-t (touch) オプションは通常は使用しないでください。


make -t を使用しない例を以下に示します。make によって作成されたターゲットファイルを削除してディレクトリ内を掃除する clean というターゲットがあるとします。

clean: 
         rm functions main.o data.o

注 -

clean は、派生ファイルを削除するターゲットを示す慣用名です。clean は、新しく最初から構築を行う場合に便利です。


ここで、以下のような無意味なコマンドを実行したとします。

$ make -t clean
touch clean 
$ make clean 
`clean' is up to date

この場合、ディレクトリ内を掃除するターゲットを再度機能させるには、clean というファイルを削除する必要があります。

-q

ターゲットファイルが最新かどうかに応じて、ゼロまたはゼロ以外の終了ステータスを返します。

-r

デフォルトのメークファイル (/usr/share/lib/make/make.rules) の読み取りを抑止します。

-S

ゼロ以外の終了ステータスをコマンドが返したときに、処理を停止して -K オプションの効果を取り消します。