수색…


기본 패턴 규칙

패턴 규칙은 대상의 단일 % 문자로 표시됩니다. %줄기 라는 비어 있지 않은 문자열과 일치합니다. 선행 조건 목록에 나타나는 모든 % 대신 스템이 사용됩니다.

예를 들어,이 규칙은 다음과 같습니다.

%.o: %.c
    $(CC) $(CFLAGS) -c $< -o $@

.o 끝나는 대상과 일치합니다. 대상이 foo.o 인 경우 스템은 foo 되고 foo.cfoo.o 컴파일합니다. 목표 및 전제 조건은 자동 변수를 사용하여 액세스 할 수 있습니다.

여러 패턴 규칙과 일치하는 대상

대상이 여러 패턴 규칙과 일치하면 make는 전제 조건이 존재하거나 작성 될 수있는 대상을 사용합니다. 예 :

%.o: %.c
    $(CC) $(CFLAGS) -c $< -o $@
%.o: %.s
    $(AS) $(ASFLAGS) $< -o $@

foo.c 또는 foo.s 중 어느 foo.s 존재하는지에 따라 foo.cfoo.o 컴파일하거나 foo.sfoo.o 어셈블합니다.

여러 규칙에 존재하거나 작성 가능한 선행 조건이있는 경우 make는 가장 짧은 줄기와 일치하는 규칙을 사용합니다. 예 :

f%r:
    @echo Stem is: $*
fo%r:
    @echo Stem is: $*

두 번째 규칙을 사용하여 대상 foo.bar Stem is: o.ba . Stem is: o.ba 입니다.

여러 개의 규칙이 가장 짧은 줄기와 일치하면 make는 Makefile의 첫 번째 줄을 사용합니다.

패턴 규칙의 디렉토리

대상 패턴에 슬래시가 포함되어 있지 않으면 make는 일치시키기 전에 빌드하려는 대상에서 디렉토리 부분을 제거합니다. 그런 다음 디렉토리가 줄기 앞에 놓입니다. 줄기가 대상 이름과 전제 조건을 작성하는 데 사용되면 디렉토리 부분이 제거되고 % 대신 줄기가 대체되고 마지막으로 디렉토리가 문자열 앞에 놓입니다. 예 :

foo%.o: %.c
    $(CC) $(CFLAGS) -c $< -o $@

lib/foobar.o 와 일치 할 것입니다 :

  • 줄기 ( $* ) : lib/bar
  • 대상 이름 ( $@ ) : lib/foobar.o
  • 필수 조건 ( $< , $^ ) : lib/foobar.c

이 예제에서 lib/foo%.o 규칙은 더 짧은 줄기와 일치하기 때문에 foo%.o 규칙보다 우선합니다.

여러 대상이있는 패턴 규칙

패턴 규칙에는 여러 개의 대상이있을 수 있지만 일반 규칙과 달리 모든 대상을 만드는 것은 제조법입니다. 예 :

debug/%.o release/%.o: %.c
    $(CC) $(CFLAGS_DEBUG) -c $< -o debug/$*.o
    $(CC) $(CFLAGS_RELEASE) -c $< -o release/$*.o

유효한 규칙은 디버그 객체와 릴리스 객체 중 하나를 빌드해야 할 때 객체를 빌드합니다. 우리가 다음과 같이 쓴다면 :

debug/%.o release/%.o: %.c
    $(CC) $(CFLAGS) -c $< -o $@

debug/*.o 또는 release/*.o 하나만 빌드 할 때 작동하지만 둘 다 빌드해야하는 경우 첫 번째 대상을 빌드합니다 (두 번째 대상을 최신으로 간주합니다).



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow