make의 모든 대상을 나열하는 방법은 무엇입니까?

make의 모든 대상을 나열하는 방법은 무엇입니까?

많은 Makefile을 포함하는 프로젝트 구조가 있고 다른 모든 Makefile을 포함하는 최상위 Makefile이 있다고 가정합니다.

가능한 모든 목표를 나열하는 방법은 무엇입니까?

나는 글쓰기를 안다

make 

그런 다음 Tab 키를 눌러 제안을 받는 것이 일반적이지만 제 경우에는 대상이 10,000개였습니다. 그렇게 하면 결과가 다음으로 전달됩니다.그리고 어떤 이유로 목록을 스크롤하면 정지 현상이 발생합니다. 다른 방법이 있나요?

답변1

Bash 완성 모듈이 make목록을 가져오는 방법은 다음과 같습니다.

make -qp |
    awk -F':' '/^[a-zA-Z0-9][^$#\/\t=]*:([^=]|$)/ {split($1,A,/ /);for(i in A)print A[i]}' |
    sort -u

페이지 매김 없이 줄 바꿈으로 구분된 대상 목록을 인쇄합니다.

답변2

FreeBSD와 NetBSD make(1)에는 이라는 내장 변수가 있습니다 .ALLTARGETS. 다음과 같이 내용을 인쇄할 수 있습니다.

make -V .ALLTARGETS

불행하게도 이렇게 하면 공백으로 구분된 목록이 인쇄됩니다. 다음이 더 유용하다고 생각했습니다.

make -V .ALLTARGETS | tr ' ' '\n'

각 대상을 자체 라인에 인쇄합니다.

답변3

이것은 스크립트가 수행하는 작업을 매우 단순화한 버전입니다 bash-completion.

make -npq : 2> /dev/null | \
    awk -v RS= -F: '$1 ~ /^[^#%.]+$/ { print $1 }'

관련 정보