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
어떤 가능성(그리고 어떤 가능성)이 고려되었는지 아는 것이 도움이 될 수 있습니다.규칙로드됨) 출력을 이해합니다.
예를 들어 추적하면 다음 줄이 적용되는 것을 볼 수 있습니다.
$(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
디렉토리에 하나가 있거나 (추적을 조사하여) 다른 기능이 프로그램이 불필요하다는 것을 발견하는 데 도움이 될 수 있습니다 make
. 두 경우 모두 서브메이크 추적에 파일을 사용하지 않습니다.
그런데 디버깅 옵션이 없습니다.POSIX가 활성화됩니다.make
, 하지만 이 기능이 없는 버전을 접할 가능성은 거의 없습니다. 예를 들어,썬 OS 4그렇게 했고,솔라리스계속 제공하세요.