Makefileでどのファイルが使用されているかを確認するには?

Makefileでどのファイルが使用されているかを確認するには?

procdriver.cをビルドして.koファイルを出力するようになっている次のmakefileがあります。問題は、procdriver.cを削除しても、私のmakefileがprocdriver.koファイルをビルドできるようです。毎回ビルドされるソースファイルの場所を見つけたいです。

TARGET = procdriver

obj-m := procdriver.o 
procdriver-objs+= gpioLib.o

KDIR:= /home/pi/myRpi/linux
PWD := $(shell pwd)

all: gpioLib.o procdriver.c
    echo<<"in all"
    $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules 
    rm -r -f .tmp_versions *.mod.c .*.cmd *.o *.symvers 



gpioLib.o: gpioLib.c gpioLib.h 
    gcc -c gpioLib.c -o gpioLib.o

clean:
    make -C $(KDIR) SUBDIRS=$(PWD) clean

Makefileの出力は次のようになります。http://paste.ubuntu.com/23575533/

答え1

これ-d(デバッグ)オプションは、知っておくべきことを示しています。例えば、

make -d |less

出力が標準出力に進んでいるようです。中に入ると、less興味深い詳細を上下に検索できます。

あなたできるを使用しますgrepが、失うコンテキスト:

make -d | grep whatever

場合によっては、makeどの可能性(そしてどの可能性)が考慮されているのかを知ることが役立ちます。ルールloaded) 出力を理解します。

たとえば、追跡すると、次の行が適用されることがわかります。

$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules 

進行中その他カタログで作成されました$(KDIR)procdriverモジュールが作成される場所は次のとおりです。

  Must remake target '/home/pi/myRpi/procdriver.o'.
set -e;  echo '  LD [M]  /home/pi/myRpi/procdriver.o'; ld -EL    -r -o /home/pi/myRpi/procdriver.o /home/pi/myRpi/gpioLib.o ; printf '%s\n' 'cmd_/home/pi/myRpi/procdriver.o := ld -EL    -r -o /home/pi/myRpi/procdriver.o /home/pi/myRpi/gpioLib.o ' > /home/pi/myRpi/.procdriver.o.cmd
{ echo /home/pi/myRpi/procdriver.ko; echo /home/pi/myRpi/gpioLib.o; } > /home/pi/myRpi/.tmp_versions/procdriver.mod
  Successfully remade target file '/home/pi/myRpi/procdriver.o'.

Pastebinの例はトレースの途中で始まります。簡単な例を見ると、前のセクションは次のように終了します。

    Trying implicit prerequisite `SCCS/s.procdriver.w'.
   Trying pattern rule with stem `procdriver'.
   Rejecting impossible implicit prerequisite `procdriver.w'.
   No implicit rule found for `procdriver.c'.
   Finished prerequisites of target file `procdriver.c'.
  No need to remake target `procdriver.c'.
 Finished prerequisites of target file `all'.
Must remake target `all'.

procdriver.cディレクトリに1つがあるか(追跡を調べて)、他の機能がプログラムが不要であることを見つけるのに役立ちますmake。どちらの場合も、サブメイクトレースにファイルを使用しません。

ところで、デバッグオプションはありません。POSIXが有効になります。makeしかし、この機能がないバージョンに触れる可能性はほとんどありません。例えば、Sun OS 4そうして、ソラリス引き続き提供してください。

関連情報