GNU Make makefile에서 대상의 전제 조건을 쿼리하는 방법은 무엇입니까?
예를 들어 대상이 다음과 같이 지정된 경우:
fred: wilma barney betty
다음과 같은 전제 조건을 인쇄하고 싶습니다 fred
.
$ make some_action fred
wilma barney betty
답변1
어쩌면 시험 운영을 찾고 계십니까?
make --dry-run fred
매뉴얼 페이지에서는 시운전에 대한 정보를 제공합니다.
-n, --just-print, --dry-run, --recon
Print the commands that would be executed, but do not
execute them.
따라서 직접 목록이 아닌 간접적 목록이 제공됩니다. 왜냐하면 그가 의존하는 작업을 실행하기를 원하기 때문입니다.
답변2
또 다른 가능성은 "데이터베이스 인쇄" 옵션이지만 원하는 것보다 더 많은 정보를 제공합니다. 매뉴얼에서:
‘-p’
‘--print-data-base’
Print the data base (rules and variable values) that results from reading the
makefiles; then execute as usual or as otherwise specified. This also prints the
version information given by the ‘-v’ switch (see below). To print the data base
without trying to remake any files, use ‘make -qp’. To print the data base of
predefined rules and variables, use ‘make -p -f /dev/null’. The data base output
contains file name and line number information for recipe and variable
definitions, so it can be a useful debugging tool in complex environments.
하지만 공정한 경고입니다. 이 난장판을 주의 깊게 살펴보세요.~ 할 것이다후처리 없이 잔인해집니다.
답변3
Makefile이 다음과 같다고 가정합니다.
.PHONY: wilma barney betty fred: wilma barney betty
최신 버전다시 만들다--profile
확인된 종속성 그래프로 변환할 수 있는 데이터를 출력하는 옵션이 있습니다 . 데이터 파일 출력 형식은 callgrind에서 사용하는 형식이므로 출력 데이터에서 차트를 생성하려면 다른 프로그램이 필요합니다. 바라보다https://github.com/rocky/remake/tree/master/profile
이전 버전의 리메이크에서는 다음을 사용하여 종속성을 얻을 수 있습니다.
$리메이크-X -f 메이크파일 GNU Make 4.1+dbg0.91 x86_64-unknown-linux-gnu용으로 특별히 제작됨 저작권 (C) 1988-2014 자유 소프트웨어 재단, Inc. 저작권 (C) 2015 록키 번스타인. 라이선스 GPLv3+: GNU GPL 버전 3 이상 이것은 무료 소프트웨어이므로 자유롭게 변경하고 재배포할 수 있습니다. 법이 허용하는 한, 어떠한 보증도 제공되지 않습니다. 메이크파일을 읽는 중... 메이크파일 업데이트.... 업데이트 대상.... "fred" 파일이 존재하지 않습니다. "wilma" 파일이 존재하지 않습니다. "Wilma" 목표를 다시 수행해야 합니다. 대상 파일 "wilma"를 성공적으로 복사했습니다. <- (/tmp/??:0) 윌마 리메이크<0>타겟 프레드 의존성 프레드: 윌마 바니 비티 리메이크<1>사직하다 리메이크: 그렇군요 여러분...
실행된 명령을 파일에 넣으면 다음과 같이 말합니다 cmds.txt
.
target fred depend quit
그런 다음 다음을 실행할 수 있습니다.
cat cmds.txt | remake -X -f Makefile
종속성 이름을 사용하고 위의 내용을 실행하는 프로그램 작성과 같이 더 복잡한 작업을 수행하는 방법에 대한 연습으로 남겨두겠습니다.