基本的makefile / linking / library问题:没有这样的文件或目录

时间:2014-10-10 19:45:55

标签: c makefile static-linking

所以我的作业基本上要求创建一个Makefile来将sorted-list.c实现编译成一个名为libsl.a的库,以及一个名为sl的可执行文件,它运行main.c中的代码。

所以到目前为止我写过:

cc=gcc

sl : main.o sorted-list.o
    cc -o -g sl main.o sorted-list.o

main.o : main.c sorted-list.h
sorted-list.o : sorted-list.c sorted-list.h

ar : rcs libsl.a sorted-list.o

clean :
    rm sl main.o sorted-list.o

在包含我所有文件的目录以及文件 makefile 中,我输入终端:

make

现在这是我第一次做这一切,所以我不得不假设它按照我的意图执行了。如果没有,请告诉我。话虽这么说,我得到以下错误:

-bash-4.1$ make
cc    -c -o sorted-list.o sorted-list.c
cc -o -g sl main.o sorted-list.o
cc: sl: No such file or directory
make: *** [sl] Error 1

Stackoverflow有以下问题:
Makefile is giving me an error - No such file or directory

这似乎是最接近的问题/解决方案,但我的可执行文件 sl 似乎正确放置(直接在标志之后),如答案所示。我不确定这是否重要,但我没有任何名为sl的文件/目录 - 根据我的理解,这将是尚未创建的可执行文件的名称。

1 个答案:

答案 0 :(得分:0)

您必须在-o选项之后立即放置可执行文件的名称,因为它是此选项的参数。所以

cc -g -o sl main.o sorted-list.o

而不是

cc -o -g sl main.o sorted-list.o

cc(1)的联机帮助页应该是这样的:

-o output
    Name the output of the compilation output instead of a.out.

这表示可执行文件的名称是-o选项的参数,因此必须在-o选项后立即显示。

请阅读联机帮助页cc(1)了解详情。