[makefile] makefile에서 “all”은 무엇을 의미합니까?

Makefile에 관한 몇 가지 튜토리얼을 읽었지만 “all”대상이 무엇을 의미하고 무엇을하는지에 대해서는 아직 명확하지 않습니다.

어떤 아이디어?



답변

Makefile이 이해하는 것처럼 빌드는 많은 대상으로 구성됩니다. 예를 들어 프로젝트를 빌드하려면 다음이 필요할 수 있습니다.

  1. file1.c에서 file1.o 빌드
  2. file2.c에서 file2.o 빌드
  3. file3.c에서 file3.o 빌드
  4. file1.o 및 file3.o에서 실행 파일 1 빌드
  5. file2.o에서 실행 파일 2 빌드

makefile을 사용하여이 워크 플로를 구현 한 경우 각 대상을 개별적으로 만들 수 있습니다. 예를 들어,

make file1.o

필요한 경우에만 해당 파일을 빌드합니다.

의 이름은 all고정되어 있지 않습니다. 그것은 단지 일반적인 이름 일뿐입니다. alltarget은 호출하면 make가 완전한 빌드를 만드는 데 필요한 모든 것을 빌드 함을 나타냅니다 . 이것은 일반적으로 파일을 생성하지 않고 다른 파일에 의존하는 더미 타겟입니다. 위의 예에서 필요한 모든 빌드는 실행 파일을 빌드하고 다른 파일은 종속성으로 가져옵니다. 따라서 makefile에서 다음과 같이 보입니다.

all: executable1 executable2

alltarget은 일반적으로 makefile에서 첫 번째입니다 make. 대상을 지정하지 않고 명령 줄에 작성 하면 첫 번째 대상이 빌드되기 때문입니다. 그리고 당신은 그것이 될 것으로 기대합니다 all.

all일반적으로 .PHONY대상 이기도합니다 . 여기에서 자세히 알아보십시오 .


답변

GNU 제조사의 설명서에 대한 명확한 정의를 제공 all그것의 표준 대상의 목록 .

Makefile의 작성자가 해당 규칙을 따르는 경우 대상은 다음을 수행 all해야합니다.

  1. 전체 프로그램을 컴파일하되 문서를 빌드하지 마십시오.
  2. 기본 대상이됩니다. 달리기 make에서와 마찬가지로 make all.

1을 달성하려면 all일반적으로 .PHONY전체 프로그램을 구성하는 실행 파일에 의존 하는 대상 으로 정의됩니다 .

.PHONY : all
all : executable

2를 달성하려면 allmake 파일에 정의 된 첫 번째 대상이되거나 기본 목표로 지정되어야합니다.

.DEFAULT_GOAL := all


답변

특별한 것을 의미하는지 확실하지 않습니다. ‘all’규칙을 제공하는 것은 규칙 일 뿐이며 일반적으로 전체 프로젝트를 빌드하는 데 필요한 모든 하위 대상을 나열하는 데 사용되므로 이름이 ‘all’입니다. 특별한 점은 종종 사람들이 makefile의 첫 번째 대상으로 그것을 넣는다는 것입니다. 이것은 단지 ‘make’를 입력하는 것만으로도 ‘make all’과 같은 일을한다는 것을 의미합니다.


답변

대상 “all”은 더미 대상의 예입니다. 디스크에는 “all”이라는 이름이 없습니다. 즉, “make all”을 수행 할 때 make는 항상 빌드해야한다고 생각하고 해당 대상에 대한 모든 명령을 실행합니다. 이러한 명령은 일반적으로 makefile이 알고있는 모든 최종 제품을 빌드하는 명령이지만 모든 작업을 수행 할 수 있습니다.

더미 대상의 다른 예는 “clean”및 “install”이며 동일한 방식으로 작동합니다.

아직 읽지 않았다면 훌륭한 튜토리얼이기도 한 GNU Make Manual을 읽어야합니다 .


답변