2012-03-01 6 views
0
)

일부 변수 대체를 시도 할 때까지 make 파일이 작동했습니다. % .o가 인식되지 않습니다.gcc Makefile : 변수 대체 오류 (%

make : *`parser '에 필요한`% .o'대상을 만드는 규칙이 없습니다. 중지.

CC=gcc 
CFLAGS=-ansi -pedantic -Wall -ggdb3 
PROJECT=project.c project.h 
PARSER=parser.c parser.h 
OBJ=project.o parser.o 
#CFILE=project.c parser.c 

#1 no problem 
#parser: project.o parser.o 
# $(CC) $(CFLAGS) -o [email protected] $^ 

#2 no problem 
#parser: $(OBJ) 
# $(CC) $(CFLAGS) -o [email protected] $^ 

#3 this fails 
parser: %.o 
    $(CC) $(CFLAGS) -o [email protected] $^ 

#parser: project.o parser.o 
# gcc -ansi -pedantic -Wall -ggdb -o parser project.o parser.o 

project.o: $(PROJECT) 
    $(CC) $(CFLAGS) -c $^ 

parser.o: $(PARSER) 
    $(CC) $(CFLAGS) -c $^ 

clean: 
    rm -f $(OBJ) parser 
+1

% 대신 *를 의미합니까? – Flexo

답변

0

대상 이름에 %이 없으므로 패턴 규칙을 만들지 않습니다. 따라서 %에는 종속성 목록에 특별한 의미가 없습니다. 이것은 파일 이름의 문자 그대로의 부분으로 간주됩니다. 일반 와일드 카드로 사용할 수 없습니다.