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

C 无法理解运行make时给出的错误,c,linux,gcc,makefile,C,Linux,Gcc,Makefile,我的目录结构是/home/akshayaj/Desktop/System Programs/dictionary/ 在字典中,我有3个文件: libdictionary.c(实现除main之外的所有函数) c(包含main()) h(包含所有函数的声明) 两个C文件都包含头文件 现在,我为上述项目编写了一个make文件。事情是这样的:- CFLAGS=-I /home/akshayaj/Desktop/System Programs/dictionary/ libdict: libentry

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

在字典中,我有3个文件:

  • libdictionary.c(实现除main之外的所有函数)
  • c(包含main())
  • 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中,我给出了整个路径,因为我在一个类似的问题中看到了它,但这不起作用。这里是这个问题的链接


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

考虑如何解析该命令行

cc -I /home/akshayaj/Desktop/System Programs/dictionary/ -c libentrypoint.c
^^ ^------------------------------^ ^------------------^ ^-----------------^
 |               |                           |                     |
Command       -I arg                      BAD ARG               -c arg
如您所见,“系统”和“程序”之间的空格被读取为两个命令参数之间的分隔符

您的选择是:

  • 更改路径,以便删除空间(推荐)。e、 g.
    /home/akshayaj/Desktop/System Programs/dictionary/

  • 在空格前添加反斜杠以将其转义。e、 g:

    /home/akshayaj/Desktop/System\ Programs/dictionary/
    

  • 作为一般规则,在使用make构建东西时,或者仅仅在一般情况下构建东西时,使用带有空格的路径是不明智的。这使得像这样的歧义很难解决。

    帮自己一个忙,不要在路径中使用空格(或其他奇怪的字符)作为代码。你可以省去引用makefiles和其他构建基础设施的麻烦。上面Mat的意思是:你的路径
    /home/akshayaj/Desktop/System Programs/dictionary/
    包含一个空格字符,它会打断
    cc
    的路径
    cc
    将其解释为两条独立的路径。您或者必须转义该空间,或者包装路径,或者按照建议和明智的做法:不要在文件夹名称中使用此类空间。