이것은 static pattern rule입니다. 첫 번째 필드는 대상 목록이고 두 번째는 대상의 목록 인 "", 두 번째는, 목표는 "줄기"를 분리하는 데 사용되는, 세 번째는 필수 구성 요소 목록을 구성하는 데 사용하는 사전 조건 패턴 입니다.
대상 패턴 obj/%.o
에 대해 그것을 일치하는 것을 발견, 당신 make obj/foo.o
이 (obj/foo.o
대상 목록 $(OBJECTS)
에 있기 때문에) 사람이 사용하기로이 규칙 첫번째 식별을 확인하는 경우가 SRCDIR = src
OBJDIR = obj
OBJECTS = obj/foo.o obj/bar.o obj/baz.o
$(OBJECTS): $(OBJDIR)/%.o : $(SRCDIR)/%.c
@$(CC) $(CFLAGS) -c $< -o [email protected]
을 가정하자 스템 (와일드 카드 %
과 일치하는 부분)은 foo
이며, 해당 패턴을 사전 조건 패턴 src/%.c
에 연결하면 선행 조건이 src/foo.c
입니다. 당신은 또한 변수를 정의한 경우
CC = gcc
CFLAGS = -thisflag -thatflag=something
은 그런 규칙의 명령은
@gcc -thisflag -thatflag=something -c src/foo.c -o obj/foo.o
이 (
$<
첫 번째 전제 조건이고
[email protected]
대상 이름이라고합니다.)이된다
다른 질문에 대한 대답 : 예, 메이크 파일은 헤더 파일 (x.h
)에 대한 종속성을 처리 할 수 있으므로 헤더가 수정되면 Make가 대상을 다시 작성합니다. 아니,이 메이크 파일은 그렇게하지 않는다.당신은 당신이 흠이 실제로 무엇인지 가정
a.o: x.h
같은 규칙을 추가, 손으로 메이크 파일을 수정할 수 있습니다, 또는 당신은 아마 당신은 아직 시도하지해야하는 고급 기술이다 메이크 자동으로 수행을 할 수 있습니다.
+1, 이유가 확실하지 않은 이유는 무엇입니까? –