Makefile에 관한 몇 가지 튜토리얼을 읽었지만 “all”대상이 무엇을 의미하고 무엇을하는지에 대해서는 아직 명확하지 않습니다.
어떤 아이디어?
답변
Makefile이 이해하는 것처럼 빌드는 많은 대상으로 구성됩니다. 예를 들어 프로젝트를 빌드하려면 다음이 필요할 수 있습니다.
- file1.c에서 file1.o 빌드
- file2.c에서 file2.o 빌드
- file3.c에서 file3.o 빌드
- file1.o 및 file3.o에서 실행 파일 1 빌드
- file2.o에서 실행 파일 2 빌드
makefile을 사용하여이 워크 플로를 구현 한 경우 각 대상을 개별적으로 만들 수 있습니다. 예를 들어,
make file1.o
필요한 경우에만 해당 파일을 빌드합니다.
의 이름은 all
고정되어 있지 않습니다. 그것은 단지 일반적인 이름 일뿐입니다. all
target은 호출하면 make가 완전한 빌드를 만드는 데 필요한 모든 것을 빌드 함을 나타냅니다 . 이것은 일반적으로 파일을 생성하지 않고 다른 파일에 의존하는 더미 타겟입니다. 위의 예에서 필요한 모든 빌드는 실행 파일을 빌드하고 다른 파일은 종속성으로 가져옵니다. 따라서 makefile에서 다음과 같이 보입니다.
all: executable1 executable2
all
target은 일반적으로 makefile에서 첫 번째입니다 make
. 대상을 지정하지 않고 명령 줄에 작성 하면 첫 번째 대상이 빌드되기 때문입니다. 그리고 당신은 그것이 될 것으로 기대합니다 all
.
all
일반적으로 .PHONY
대상 이기도합니다 . 여기에서 자세히 알아보십시오 .
답변
GNU 제조사의 설명서에 대한 명확한 정의를 제공 all
그것의 표준 대상의 목록 .
Makefile의 작성자가 해당 규칙을 따르는 경우 대상은 다음을 수행 all
해야합니다.
- 전체 프로그램을 컴파일하되 문서를 빌드하지 마십시오.
- 기본 대상이됩니다. 달리기
make
에서와 마찬가지로make all
.
1을 달성하려면 all
일반적으로 .PHONY
전체 프로그램을 구성하는 실행 파일에 의존 하는 대상 으로 정의됩니다 .
.PHONY : all
all : executable
2를 달성하려면 all
make 파일에 정의 된 첫 번째 대상이되거나 기본 목표로 지정되어야합니다.
.DEFAULT_GOAL := all
답변
특별한 것을 의미하는지 확실하지 않습니다. ‘all’규칙을 제공하는 것은 규칙 일 뿐이며 일반적으로 전체 프로젝트를 빌드하는 데 필요한 모든 하위 대상을 나열하는 데 사용되므로 이름이 ‘all’입니다. 특별한 점은 종종 사람들이 makefile의 첫 번째 대상으로 그것을 넣는다는 것입니다. 이것은 단지 ‘make’를 입력하는 것만으로도 ‘make all’과 같은 일을한다는 것을 의미합니다.
답변
대상 “all”은 더미 대상의 예입니다. 디스크에는 “all”이라는 이름이 없습니다. 즉, “make all”을 수행 할 때 make는 항상 빌드해야한다고 생각하고 해당 대상에 대한 모든 명령을 실행합니다. 이러한 명령은 일반적으로 makefile이 알고있는 모든 최종 제품을 빌드하는 명령이지만 모든 작업을 수행 할 수 있습니다.
더미 대상의 다른 예는 “clean”및 “install”이며 동일한 방식으로 작동합니다.
아직 읽지 않았다면 훌륭한 튜토리얼이기도 한 GNU Make Manual을 읽어야합니다 .