makefile
GNU 패턴 규칙
수색…
기본 패턴 규칙
패턴 규칙은 대상의 단일 %
문자로 표시됩니다. %
는 줄기 라는 비어 있지 않은 문자열과 일치합니다. 선행 조건 목록에 나타나는 모든 %
대신 스템이 사용됩니다.
예를 들어,이 규칙은 다음과 같습니다.
%.o: %.c
$(CC) $(CFLAGS) -c $< -o $@
.o
끝나는 대상과 일치합니다. 대상이 foo.o
인 경우 스템은 foo
되고 foo.c
를 foo.o
컴파일합니다. 목표 및 전제 조건은 자동 변수를 사용하여 액세스 할 수 있습니다.
여러 패턴 규칙과 일치하는 대상
대상이 여러 패턴 규칙과 일치하면 make는 전제 조건이 존재하거나 작성 될 수있는 대상을 사용합니다. 예 :
%.o: %.c
$(CC) $(CFLAGS) -c $< -o $@
%.o: %.s
$(AS) $(ASFLAGS) $< -o $@
foo.c
또는 foo.s
중 어느 foo.s
존재하는지에 따라 foo.c
를 foo.o
컴파일하거나 foo.s
를 foo.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
하나만 빌드 할 때 작동하지만 둘 다 빌드해야하는 경우 첫 번째 대상을 빌드합니다 (두 번째 대상을 최신으로 간주합니다).