나는 makefile을 가지고 놀고 있는데 % .o 또는 % .c를 만났다 . 내가 이해 한 바에 따르면 모든 c 또는 o 파일을 지정 합니다. 그러나 왜 이것이 작동합니까?
%.o: %.c
$(CC) -c $^ -o $@
그리고 이것은 작동하지 않습니다
SOURCE := $(wildcard *.c)
$(SOURCE:.c=.o): SOURCE
$(CC) -c $^ -o $@
두 표현식 모두 모든 파일을 지정합니다. 그래서 make 파일의 % .o : 기호는 무엇을합니까?
답변
두 표현식 모두 모든 파일을 지정합니다.
아니, 첫 번째 규칙은 해당 파일이 주어진 파일 make
을 얻는 방법을 알려줍니다 . 단수 : 단일 파일을 참고하십시오..o
.c
두 번째 규칙 make
은 .o
다른 .c
파일 에 해당하는 파일 을 얻는 방법을 알려 줍니다 . 복수형 : 모든 .c
파일이 *.c
globbing으로 인해 발생합니다 .
참고 %.o: %c
로 GNU 확장입니다.
또 다른 측면 make
에서 StackOverflow 에서 사용하는 방법을 배우지 않을 것입니다. 대신 책을 읽는 것을 고려해야합니다.
답변
구성 :
%.o: %.c
$(CC) -c $^ -o $@
인 패턴 규칙 묵시적 규칙의 유형이다. 하나의 대상과 하나의 종속성을 지정 $(CC)
하고 각 대상마다 하나의 호출을 발생시킵니다 . 이 동안 :
SOURCE := $(wildcard *.c)
$(SOURCE:.c=.o): SOURCE
$(CC) -c $^ -o $@
표준 규칙이지만 많은 대상과 많은 종속성이있을 수 있습니다. 그러나이 모든 것에는 $(CC)
한 번만 호출 됩니다.