GNU Make 버전 3.81에는 명령 줄에 대상이 지정되지 않은 경우 목표 (또는 대상)를 작성해야하는지 확인하는 데 사용할 수있는 .DEFAULT_GOAL이라는 특수 변수가 도입되었습니다. 그렇지 않으면 Make는 처음 만나는 대상을 간단하게 만듭니다.빈 타겟 규칙은 GNU Make에서 .DEFAULT_GOAL을 대체 할 수 있습니까?
고려 "바"를 구축 할 것입니다 make
를 실행 위의 가상 메이크와
bar: a b c ${MAKE_BAR_COMMANDS} foo: x y z ${MAKE_FOO_COMMANDS}
, 그것은 만남을 만들기 첫 번째 대상이기 때문이다. 우리가
.DEFAULT_GOAL := foo # Build foo by default, even if it's not first. bar: a b c ${MAKE_BAR_COMMANDS} foo: x y z ${MAKE_FOO_COMMANDS}
...과 같이, .DEFAULT_GOAL을 추가하는 경우하지만 ... 우리는 단지 make
을 실행하면 "foo는"을 구축 할 것입니다 (버전 3.81)를 확인합니다.
이 .DEFAULT_GOAL 변수는 내가 작성한 모듈 형의 재사용 가능한 Makefile "프레임 워크"에서 유용하다는 것을 알았습니다. 그러나 많은 시스템에 GNU Make 3.80 이전 버전이 있고이 변수를 지원하지 않는다는 것을 알았습니다.
foo: # Empty target rule bar: a b c ${MAKE_BAR_COMMANDS} foo: x y z ${MAKE_FOO_COMMANDS}
을 내가 알고 : 것들로 주위를 재생하는 동안
, 나는 단순히 빈 대상 규칙을 지정하는 확인도 GNU의 이전 3.81 버전, .DEFAULT_GOAL 것과 같은 효과를 갖고있는 것 같아요 것으로 나타났습니다 이 방법으로 추가 대상 규칙을 지정하여 대상의 규칙 및/또는 기본 규칙에 추가하는 것이 타당하고 합법적입니다. 그러나이 작업을 수행하면 .DEFAULT_GOAL을 사용할 때 발생하지 않는 잠재적으로 바람직하지 않은 부작용이 발생할 수 있습니다.
간단한 공백 대상 규칙으로 동일한 작업을 수행 할 수 있다면 왜 .DEFAULT_GOAL이 도입되었는지 궁금합니다. 이것은 내가 정확히 같은 같은 결과가 아닌 것으로 의심됩니다.
그렇다면 결론은 .DEFAULT_GOAL과 빈 대상 규칙 사이에 외부 적으로 감지 할 수있는 차이가 있습니까?