gcc makefile错误:“没有规则来制作目标...”

时间:2012-05-07 02:19:50

标签: gcc makefile

我正在尝试使用GCC(linux)和makefile来编译我的项目。 我收到以下错误:

% make map
make: *** No rule to make target `map'.  Stop.

有没有人知道那可能是什么?

这是makefile:

CC = gcc
DEBUG_FLAG = -g
COMP_FLAG = -std=c99 -Wall -Werror -pedantic-errors -DNDEBUG 

LIB = -L. -lmtm 
MAP_OBJS = map.o
USER_OBJS = user.o
NETWORK_OBJS = network.o
ISOCIAL_OBJS = network.o user.o Isocial.o
PARSING_OBJS = user.o network.o map.o Isocial.o mtm_isocial.o

PARSING = parsing
MAP_TEST = map_example_test
ISOCIAL_TEST = Isocial_test
NETWORK_TEST = network_test
USER_TEST = user_test

TEST_PATH = ./tests/

$(PARSING) : $(PARSING_OBJS) 
    $(CC) $(DEBUG_FLAG) $(PARSING_OBJS) $(LIB) -o $@
$(MAP_TEST) : $(MAP_OBJS)
    $(CC) $(DEBUG_FLAG) $(MAP_OBJS) $(LIB) -o $@
$(ISOCIAL_TEST) : $(ISOCIAL_OBJS)
    $(CC) $(DEBUG_FLAG) $(ISOCIAL_OBJS) $(LIB) -o $@
$(USER_TEST) : &(USER_OBJS)
    $(CC) $(DEBUG_FLAG) $(USER_OBJS) $(LIB) -o $@
$(NETWORK_TEST) : $(NETWORK_OBJS)
        $(CC) $(DEBUG_FLAG) $(MAP_OBJS) $(LIB) -o $@

map.o: map.c map.h mtm_ex2.h
    $(CC) -c $(DEBUG_FLAG) $(COMP_FLAG) $*.c
isocial.o: Isocial.c user.h mtm_ex2.h set.h network.h list.h Isocial.h
    $(CC) -c $(DEBUG_FLAG) $(COMP_FLAG) $*.c
parsing.o: parsing.c Isocial.h parsing.h mtm_ex2.h
    $(CC) -c $(DEBUG_FLAG) $(COMP_FLAG) $*.c
network.o: network.c network.h set.h mtm_ex2.h
    $(CC) -c $(DEBUG_FLAG) $(COMP_FLAG) $*.c
user.o:user.c user.h set.h mtm_ex2.h
    $(CC) -c $(DEBUG_FLAG) $(COMP_FLAG) $*.c
user_test.o:  user_test.c ../test_utilities.h ../user.h ../mtm_ex2.h \
  ../set.h  
    $(CC) -c $(DEBUG_FLAG) $(COMP_FLAG) $(TEST_PATH)$*.c
Isocial_test.o:  Isocial_test.c ../test_utilities.h ../Isocial.h
    $(CC) -c $(DEBUG_FLAG) $(COMP_FLAG) $*.c $(TEST_PATH)$*.c
map_example_test.o: map_example_test.c ../test_utilities.h ../map.h
    $(CC) -c $(DEBUG_FLAG) $(COMP_FLAG) $*.c $(TEST_PATH)$*.c
network_test.o: network_test.c ../test_utilities.h ../network.h ../set.h \
  ../mtm_ex2.h
    $(CC) -c $(DEBUG_FLAG) $(COMP_FLAG) $*.c $(TEST_PATH)$*.c

EXEC = $(PARSING) $(MAP_TEST) $(ISOCIAL_TEST $(USER_TEST) $(NETWORK_TEST)

tests : $(MAP_TEST) $(ISOCIAL_TEST) $(USER_TEST) $(NETWORK_TEST)

isocial : $(PARSING)

clean:
    rm -f $(PARSING_OBJS) $(EXEC)

1 个答案:

答案 0 :(得分:3)

错误消息是正确的:我看到map.o的目标,但map没有目标,看起来像

 map: map.o
    something something something

有名为parsingmap_example_testnetwork_testIsocial_test的程序的目标;也许你想建立其中一个?

如果您只输入make,它会构建程序parsing,因为这是文件中的第一个目标。