Makefile错误 - 没有这样的文件或目录

时间:2013-11-12 03:23:20

标签: makefile

我正在尝试将新文件集成到我的程序编译中。我对“routed.o:”行彻底感到困惑。我的程序有一个名为“routed”的主文件和两个支持文件,其中包含主文件调用的函数。任何人都可以帮我理解如何将其编译成一个程序吗?谢谢!

编辑:我想出来了。为了后人的缘故,我已经注释掉了我的“愚蠢”行,并用有效的东西取而代之。

CC = gcc
CFLAGS = -c -g -Wall -Wextra
DEPS = routed.h

all: routed_LS

%.o: %.c $(DEPS)
    $(CC) -c -o $@ $< $(CFLAGS)

helper_funcs.o: helper_funcs.c
    $(CC) -c helper_funcs.c -o helper_funcs.o

dijkstra.o: dijkstra.c
    $(CC) -c dijkstra.c -o dijkstra.o

# routed.o: routed.c helper_funcs.o dijkstra.o
#   $(CC) -c routed.c -o routed.o -o dijkstra.o

routed.o: routed.c
$(CC) -c routed.c

# routed: routed.o helper_funcs.o dijkstra.o
#   $(CC) -o routed routed.o helper_funcs.o dijkstra.o 

routed: routed.o dijkstra.o helper_funcs.o
$(CC) -o routed routed.o dijkstra.o helper_funcs.o  

clean:
    rm -f *.o
    rm -f routed

这是终端输出:

rm -f *.o
rm -f routed
gcc -c helper_funcs.c -o helper_funcs.o
gcc -c dijkstra.c -o dijkstra.o
gcc -c routed.c -o routed.o -o dijkstra.o
gcc -o routed routed.o helper_funcs.o dijkstra.o 
i686-apple-darwin11-llvm-gcc-4.2: routed.o: No such file or directory
make: *** [routed] Error 1

2 个答案:

答案 0 :(得分:3)

此命令:

$(CC) -c routed.c -o routed.o -o dijkstra.o

不符合您的想法。我不完全确定你在这里尝试了什么,但是编译器将输出文件的名称设置为“routed.o”,然后尽职地将其设置为“dijkstra.o”。该命令生成一个名为“dijkstra.o”的目标文件,就是这样。 routed.o规则实际上不会生成名为routed.o的文件,当链接器到达该目标文件时,它无法找到它。

答案 1 :(得分:0)

我真的不明白我在做什么,你可以清楚地说出来。我修复此问题的方法是进行以下更改:

# routed.o: routed.c helper_funcs.o dijkstra.o
#   $(CC) -c routed.c -o routed.o -o dijkstra.o

routed.o: routed.c
$(CC) -c routed.c

# routed: routed.o helper_funcs.o dijkstra.o
#   $(CC) -o routed routed.o helper_funcs.o dijkstra.o