Makefile에서 % 기호는 무엇을 의미합니까? 있는데 % .o 또는 % .c를

나는 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파일이 *.cglobbing으로 인해 발생합니다 .

참고 %.o: %c로 GNU 확장입니다.

또 다른 측면 make에서 StackOverflow 에서 사용하는 방법을 배우지 않을 것입니다. 대신 책을 읽는 것을 고려해야합니다.


답변

구성 :

%.o: %.c
        $(CC) -c $^  -o $@

패턴 규칙 묵시적 규칙의 유형이다. 하나의 대상과 하나의 종속성을 지정 $(CC)하고 각 대상마다 하나의 호출을 발생시킵니다 . 이 동안 :

SOURCE := $(wildcard *.c)

$(SOURCE:.c=.o): SOURCE
        $(CC) -c $^  -o $@

표준 규칙이지만 많은 대상과 많은 종속성이있을 수 있습니다. 그러나이 모든 것에는 $(CC)한 번만 호출 됩니다.