Makefile의 % 기호는 무엇을 의미합니까?

Makefile의 % 기호는 무엇을 의미합니까?

나는 makefile을 가지고 놀다가 우연히 발견했습니다.%.영형또는%. 씨. 내가 이해하는 바에 따르면 모든 것을 지정합니다.또는문서. 하지만 이것이 작동하는 이유는 다음과 같습니다.

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

이건 작동하지 않아

SOURCE := $(wildcard *.c)

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

두 표현식 모두 모든 파일을 지정합니다. 그래서 뭐%.영형:make 파일의 기호는 무엇을 합니까?

답변1

구조:

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

패턴 규칙, 이는 암묵적인 규칙입니다. 그것은 지정한다하나목표와하나$(CC)종속성을 가지며 대상당 한 번 호출되도록 합니다. 비록 이것이:

SOURCE := $(wildcard *.c)

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

표준 규칙이지만 (아마도)많은목표와많은종속성. 그러나 그럼에도 불구하고 한 번만 호출됩니다 $(CC).

답변2

두 표현식 모두 모든 파일을 지정합니다.

아니요, 첫 번째 규칙은 해당 파일이 제공된 파일을 얻는 make방법을 알려줍니다 . 단수형: 단일 파일에 주목하세요..o.c

두 번째 규칙(클레임)은 해당 파일의 또 다른 묶음이 주어지면 make파일 묶음을 얻는 방법을 알려줍니다. 복수형: 와일드카드로 생성된 모든 파일에 유의하세요..o.c.c*.c

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

반면에 makeStackOverflow를 사용하는 방법은 배우지 않습니다. 책 읽기를 고려해 보아야 합니다.

관련 정보