AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 448913
Accepted
Acsor
Acsor
Asked: 2018-06-11 01:06:11 +0800 CST2018-06-11 01:06:11 +0800 CST 2018-06-11 01:06:11 +0800 CST

如何在以下 makefile 下的空格分隔目录中编译 Linux 内核模块?

  • 772

我试图编译内核模块源代码,直到我注意到一些空格导致路径名不匹配。我发现自己的目录是:

axor@vacuum:~/software/CS 8803/Operating System Concepts/Chapter 2/ch2$ ls
Makefile  simple.c

我发生的错误:

axor@vacuum:~/software/CS 8803/Operating System Concepts/Chapter 2/ch2$ make
make -C /lib/modules/4.9.0-3-amd64/build M="/home/none/software/CS 8803/Operating System Concepts/Chapter 2/ch2" modules
make[1]: Entering directory '/usr/src/linux-headers-4.9.0-3-amd64'
/usr/src/linux-headers-4.9.0-3-common/scripts/Makefile.build:44: /home/none/software/CS/Makefile: No such file or directory
make[4]: *** No rule to make target '/home/none/software/CS/Makefile'.  Stop.
make[3]: *** [/usr/src/linux-headers-4.9.0-3-common/Makefile:1507: _module_/home/none/software/CS] Error 2
make[2]: *** [Makefile:150: sub-make] Error 2
make[1]: *** [Makefile:8: all] Error 2
make[1]: Leaving directory '/usr/src/linux-headers-4.9.0-3-amd64'
make: *** [Makefile:4: all] Error 2

现在,我很清楚目录名称中的空格导致了问题。我将感兴趣的目录树重命名为~/software/CS-8803/Operating-System-Concepts/Chapter-2/ch2,所有这些都有效。

问题:即使在包含空格的目录名称下,我如何才能使以下 makefile 正常工作?

obj-m += simple.o

all:
        make -C /lib/modules/$(shell uname -r)/build M="$(PWD)" modules

clean:
        make -C /lib/modules/$(shell uname -r)/build M="$(PWD)" clean
make whitespace
  • 1 1 个回答
  • 1275 Views

1 个回答

  • Voted
  1. Best Answer
    Gilles 'SO- stop being evil'
    2018-06-11T03:21:28+08:002018-06-11T03:21:28+08:00

    你不能。makefile 语法严重依赖空格来分隔单词。当文件名包含空格时,很难编写可以正常工作的 makefile,并且 Linux 内核 makefile 和大多数 makefile 一样,不要尝试。

    在 makefile 的命令中使用文件名时,也很难正确地安排文件名的引用,而且大多数 makefile 都不会尝试。所以避免所有对 shell 特殊的字符:不仅是空格,还有!"#$&'()*;<=>?[]\`{|}.

    在您的情况下,一种解决方法是使用其路径不包含任何特殊字符的符号链接。我认为这适用于 Linux 内核 makefile。它在使用 GNU makerealpath函数的 makefile 中不起作用,但内核 makefile 不在外部驱动程序的路径上使用它。

    axor@vacuum:~/software/CS 8803/Operating System Concepts/Chapter 2/ch2$ ln -s "$PWD" /tmp/ch2
    axor@vacuum:~/software/CS 8803/Operating System Concepts/Chapter 2/ch2$ cd !$
    axor@vacuum:/tmp/ch2$ make
    make -C /lib/modules/4.9.0-3-amd64/build M="/tmp/ch2" modules
    …
    
    • 10

相关问题

  • Fedora 27 /usr/bin/ld: 找不到 -lstdc++

  • 如何减少将标签显示为标签?

  • 从源代码编译时应该何时构建“lib”和“include”目录?

  • GNU make dep 究竟做了什么?

  • Makefile中的引用函数?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    ssh 无法协商:“找不到匹配的密码”,正在拒绝 cbc

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    如何卸载内核模块“nvidia-drm”?

    • 13 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add 返回:“连接代理时出错:没有这样的文件或目录” 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve