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そうして、ソラリス引き続き提供してください。