2012-01-29 4 views
0

후속은 :make : 패턴 규칙이 적용되지 않았습니까?

OBJ_DIR = obj 
SRC_DIR = src 
BIN_DIR = bin 

INCLUDE = -I./$(SRC_DIR) 
LIBS = 

_SRCS = print_current_dir.c test_main.c 

_OBJS = print_current_dir.o test_main.o 

SRCS = $(addprefix $(SRC_DIR)/,$(_SRCS)) 
OBJS = $(addprefix $(OBJ_DIR)/,$(_OBJS)) 

$(OBJ_DIR)/%.o: %.c %.h 
    $(CC) -c -o $(OBJ_DIR)/[email protected] $< $(CFLAGS) 

all: $(BIN_DIR)/pps-linux $(BIN_DIR)/pps-win32 

$(BIN_DIR)/pps-linux: $(OBJS) 
    CC = cc 
    CFLAGS = -g -Wall $(INCLUDE) $(LIBS) 

$(BIN_DIR)/pps-win32: $(OBJS) 
    CC = i586-mingw32msvc-cc 
    CFLAGS = -g -Wall $(INCLUDE) $(LIBS) 

.PHONY: clean 

clean: 
    rm -f $(OBJS) $(SRC_DIR)/~ core $(BIN_DIR)/* 

파일의 print_current_dir.c 및 test_main.c은 다음과 같습니다

/pps 
    /src 
    /obj 
    /bin 
    Makefile 

그리고 메이크 파일의 내용이 있습니다 : Set up a development environment on Linux targeting Linux and Windows

프로젝트 디렉토리는 다음과 같습니다 테스트 용.

이 메이크 파일은 작동하지 않습니다

$ make 
make: *** No rule to make target `obj/print_current_dir.o', needed by `bin/pps-linux'. Stop. 

나는 문제가 %의 .o 인 규칙을 생각합니다. 나는 그것이 사소한 것이라고 확신하지만, 나는 경험에 익숙하지 않다.

감사합니다.

+1

참고. 그러므로 아마도 $ (OBJ_DIR)/%. o'를 첫 번째 타겟으로 삼기를 원하지 않을 것입니다. –

답변

3

이 규칙 :

$(OBJ_DIR)/%.o: %.c %.h 

obj/foo.ofoo.c하지 src/foo.c에 따라 지정합니다. foo.c이 없으므로이 규칙을 적용 할 수 없습니다 (따라서 오류 메시지).

가 작업을 수행해야합니다 당신이 대상을 지정하지 않고`make`를 입력하면, 파일의 첫 번째는 기본적으로 사용되는

$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c $(SRC_DIR)/%.h 
관련 문제