无法理解运行make所给出的错误

时间:2014-04-29 09:26:15

标签: c linux gcc makefile

我的目录结构是/home/akshayaj/Desktop/System Programs/dictionary/

在字典里面我有3个文件:

  • libdictionary.c(实现除main之外的所有函数),
  • libentrypoint.c(包含main()),
  • libdictionary.h(包含所有功能的声明)

两个C文件都包含头文件

现在我为上面的项目编写了一个make文件。它是这样的: -

CFLAGS=-I /home/akshayaj/Desktop/System Programs/dictionary/
libdict: libentrypoint.o libdictionary.o
    cc $(CFLAGS) -o libdict libentrypoint.o libdictionary.o
libentrypoint.o: libentrypoint.c libdictionary.h
    cc $(CFLAGS) -c libentrypoint.c
libdictionary.o: libdictionary.c libdictionary.h
    cc $(CFLAGS) -c libdictionary.c

现在,当我运行它时,我遇到了这些错误: -

cc -I /home/akshayaj/Desktop/System Programs/dictionary/ -c libentrypoint.c


cc: error: Programs/dictionary/: No such file or directory


make: *** [libentrypoint.o] Error 1

我哪里错了?

注意: - 在CFLAGS中,我已经给出了完整的路径,因为我在一个类似的问题中看到了它,但那并没有起作用。这是该问题的链接。

C Compile Error (No such file or directory, compilation terminated)

2 个答案:

答案 0 :(得分:1)

尝试使用路径/home/akshayaj/Desktop/System\ Programs/dictionary/,其中\处理空间。

答案 1 :(得分:1)

考虑如何解析该命令行...

cc -I /home/akshayaj/Desktop/System Programs/dictionary/ -c libentrypoint.c
^^ ^------------------------------^ ^------------------^ ^-----------------^
 |               |                           |                     |
Command       -I arg                      BAD ARG               -c arg

正如您所看到的,"系统"之间的空间。和"节目"被读作两个命令args之间的分隔符。

您的选择是:

  1. 更改路径以移除空间(推荐)。例如/home/akshayaj/Desktop/System-Programs/dictionary/

  2. 在空格前添加反斜杠以逃避它。 e.g:

    /home/akshayaj/Desktop/System\ Programs/dictionary/
    
  3. 作为一般规则,在使用make构建东西或者只是构建一般东西时使用带有空格的路径是不明智的。这使得这样的含糊不清难以解决。