왜 첫 번째 전제조건만 실행되나요?

왜 첫 번째 전제조건만 실행되나요?

이것이 메이크 파일이다.

.PHONY: all target1 target2 target
all: target1 target2
target1: NUM = 1
target2: NUM = 2
target1 target2: target
target:
    @echo "this is target ${NUM}"

출력은 다음과 같습니다

this is target 1

왜 첫 번째 전제조건만 실행되나요? 변수와 관련이 있는 것 같아요. 감사해요!

답변1

Makefile 콘텐츠는 다음과 같습니다.

  • 모든 골은 가짜다(디스크의 아티팩트와 일치하지 않습니다.)
  • alltarget1및 에 의존하며 target2첫 번째 대상이므로 기본 대상입니다.
  • target11로 설정 NUM(사용타겟별 변수 할당);
  • target2NUM2로 설정 ;
  • target1둘 다 target2다음에 의존합니다 target.
  • target주어진 명령을 실행하여 만족해야 합니다 echo.

이러한 정의를 사용하여 실행하면 make다음과 같은 결과가 생성됩니다.

  • all그것은 거짓이고 요구하기 때문에 불만족스럽 target1습니다 target2.
  • target1false이고 필수이므로 만족되지 않습니다 target( NUM1로 설정).
  • target거짓이고 전제 조건이 없기 때문에 만족스럽지 않으면 명령을 make실행하십시오 .echo
  • target2가품이라 만족스럽지 않지만, target처리되어서 아무 일도 일어나지 않아서 만족스럽습니다.

여기서 수행하려는 것처럼 대상을 함수로 사용할 수 없습니다. 일부 Make 구현은 지원합니다.기능, 하지만 다음은 필요하지 않습니다.

target1 target2:
    @echo "this is target ${NUM}"

관련 정보