대상이 지정되지 않은 경우 "만들기"앱은 빌드 할 기본 대상을 어떻게 알 수 있습니까?


188

대부분의 리눅스 앱은 다음과 같이 컴파일됩니다 :

make
make install clean

내가 이해했듯이 make는 빌드 대상의 이름을 인수로 사용합니다. 그래서 install사본 일부 파일을 한 후 그 대상이다 clean임시 파일을 제거하는 대상은.

그러나 make인수가 지정되지 않은 경우 어떤 대상이 작성 됩니까 (예 : 첫 번째 명령)?

답변:


232

기본적으로, 이는 .일명 기본 목표로 시작하지 않는 첫 번째 대상을 처리하는 것으로 시작합니다 . 그러기 위해서는 다른 대상, 특히 첫 번째 대상이 의존하는 대상을 처리해야 할 수도 있습니다.

GNU 설명서 확인 커버 모든이 물건을, 그리고 놀라 울 정도로 쉽게 정보를 읽기입니다.


61
첫 번째 대상을 호출하는 all것은 단지 규칙입니다.
Tobu

1
다른 사용자를 위해 설치하는 경우 make install전체 빌드가 아닌 sudo 만 실행하면되므로 별도로 실행하는 것이 좋습니다.
Scott Wales

2
참고로 make의 기본 man 항목은 대상을 지정하지 않으면 어떤 일이 발생하는지 언급하지 않습니다.
Sekm

2
만약 GNU make 매뉴얼이이 내용을 다룬다면 왜이 질문을 했습니까? 이 매뉴얼은 규칙을 작성하는 방법을 문서화하는 데 능숙하지만 Makefile을 작성하는 방법에 대해서는 언급하지 않습니다.
Nick

1
include다른 makefile 인 make 파일을보고 있는데 첫 번째 대상은 %.o : %.cpp입니다. 기본 대상은 .... 모든 .cpp 파일을 빌드하는 것입니까?
Qwertie

178

다른 사람들을 몇 초 동안 저장하고 매뉴얼을 읽지 않아도되도록 저장하는 방법은 다음과 같습니다. 이것을 메이크 파일의 맨 위에 추가하십시오 :

.DEFAULT_GOAL := mytarget

mytarget은 이제 "make"가 실행되고 대상이 지정되지 않은 경우 실행되는 대상이됩니다.

이전 버전의 make (<= 3.80)가있는 경우 작동하지 않습니다. 이 경우 anon이 언급 한 것을 수행 할 수 있습니다 .make 파일의 맨 위에 추가하십시오.

.PHONY: default
default: mytarget ;

참조 : https://www.gnu.org/software/make/manual/html_node/How-Make-Works.html


1
@nathan 누군가 매개 변수없이 "make"를 실행하면 mytarget을 기본 대상으로 만듭니다.
사무엘

1
.DEFAULT_GOAL은 GNU make v3.80에서 지원되지 않는 것으로 보이며 이전 버전도 지원한다고 가정합니다 (v3.81은 지원합니다). 이전 버전의 make를 실행중인 경우 기본 대상이 make 파일에서 첫 번째 / 가장 큰 대상인지 확인해야합니다.
사무엘

4
"... 설명서를 읽지 않아도되는 것"은 SO의 요점 중 하나입니다. 즉, 고대 문서에서 발굴하는 데 시간이 걸리는 질문에 대한 빠른 답변입니다.
WattsInABox

1
"이것은 메이크 파일의 상단에 추가하십시오": 상단에 추가 할 필요는없는 것 같습니다.
Aman Deep Gautam

2
이것이 정답이어야합니다. 이 경우 암시 적 승리보다 명시 적입니다.
Sion

34

GNU Make를 사용하면이라는 특수 변수를 사용하여 기본 make 대상을 지정할 수도 있습니다 .DEFAULT_GOAL. Makefile 중간에이 변수를 설정 해제해도 파일의 다음 대상이 기본 대상이됩니다.

참고 : Gnu Make 매뉴얼-특수 변수

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.