makefile 错误“没有规则来制作目标”如何解决?

makefile 错误“没有规则来制作目标”如何解决?

我的 makefile 有什么问题吗?

CC = gcc
OBJS = main.o map.o extended_map.o election.o utilities.o
EXEC = election
DEBUG_FLAG = -DNDEBUG
COMP_FLAG = -std=c99 -Wall -pedantic-errors -Werror

$(EXEC) : $(OBJS)
    $(CC) $(DEBUG_FLAG) $(OBJS) -o $@
main.o: main.c map.h election.h test_utilities.h
    $(CC) -c $(DEBUG_FLAG) $(COMP_FLAG) $*.c
map.o: map.c map.h utilities.h
    $(CC) -c $(DEBUG_FLAG) $(COMP_FLAG) $*.c
extended_map.o: extended_map.c extended_map.h map.h utilities.h
    $(CC) -c $(DEBUG_FLAG) $(COMP_FLAG) $*.c
election.o: election.c election.h map.h extended_map.h utilities.h
    $(CC) -c $(DEBUG_FLAG) $(COMP_FLAG) $*.c
utilities.o: utilities.c utilities.h
    $(CC) -c $(DEBUG_FLAG) $(COMP_FLAG) $*.c
clean:
    rm -f $(OBJS) $(EXEC)

我在linux上运行以下命令:

-bash-4.2$ ls
election.c  extended_map.c  main.c  makefile  mtm_map           utilities.c
election.h  extended_map.h  main.o  map.h     test_utilities.h  utilities.h
-bash-4.2$ make
make: *** No rule to make target `map.c', needed by `map.o'.  Stop.
-bash-4.2$

map.c 存在于mtm_map当前文件夹内命名的文件夹内

答案1

您的构建规则map.o需要一个名为的输入文件map.c 在当前的目录。你说这个文件实际上位于mtm_map目录中,所以你的 make 规则应该说:

map.o: mtm_map/map.c map.h utilities.h
    $(CC) -c $(DEBUG_FLAG) $(COMP_FLAG) $*.c

相关内容