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어떤 가능성(그리고 어떤 가능성)이 고려되었는지 아는 것이 도움이 될 수 있습니다.규칙로드됨) 출력을 이해합니다.

예를 들어 추적하면 다음 줄이 적용되는 것을 볼 수 있습니다.

$(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그렇게 했고,솔라리스계속 제공하세요.

관련 정보