나는 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: %c
GNU 확장입니다.
반면에 make
StackOverflow를 사용하는 방법은 배우지 않습니다. 책 읽기를 고려해 보아야 합니다.