标签: make

Linux 内核构建过程的每一步都发生了什么?

我已经阅读了许多关于如何使用这些内核构建自定义内核和启动 Ubuntu 的教程,并成功地遵循了指南并启动了自定义内核,但我不了解指南中的每个命令的作用以及实际发生的情况每个命令。

Ubuntu 网站上描述的过程对fakeroot, dpkg, make-kpkg, 一些 initramfs 和其他可怕的东西做了很多工作,但根本无法帮助我理解发生了什么。

  • makelinux内核目录中的输出是什么?
  • 它是否创建了“压缩内核映像”?
  • “压缩内核映像”文件的名称是什么?它放在哪里?
  • 有什么作用make modules
  • 应该make modules在之前还是之后make
  • 不会make自动构建我的模块吗?
  • 将新构建的内核添加到可引导内核列表的过程是什么(英文,不仅仅是命令列表)?
  • 有什么作用make install
  • make install它添加到我的可引导内核列表中,这样我就不必再做任何事情了吗?
  • 有等价物make modules_install吗?

ubuntu make linux-kernel

30
推荐指数
1
解决办法
2万
查看次数

如何更改用于 qmake 的 Qt 版本?

我觉得应该有一个简单的方法来做到这一点,但我的 googlefu 失败了,所以我真的很感激一些关于如何切换(甚至永久更改)在执行 qmake 时使用的 Qt 版本的信息。如果我问是哪个版本,我会得到以下信息:

~ $ qmake --version
QMake version 3.0
Using Qt version 5.0.1 in /usr/lib/x86_64-linux-gnu
Run Code Online (Sandbox Code Playgroud)

我已经安装了 QtCreator,但我不知道从哪里开始。

make qt qtcreator

30
推荐指数
4
解决办法
11万
查看次数

在哪里可以找到“make”错误代码列表?

我正在尝试编译一个用 Fortran 编写的程序make(我有一个Makefile,在包含Makefile的目录中,我输入命令$ make target,其中“目标”是我的Makefile 中存在的系统特定的目标规范。正如我对我的目标规范的各种修订进行试验,我在尝试调用 时经常收到各种错误消息make。举几个例子:

make[1]: Entering directory
/bin/sh: line 0: test: too many arguments
./dpp   angfrc.f > angfrc.tmp.f
/bin/sh: ./dpp: Permission denied
make[1]: *** [angfrc.o] Error 126
make[1]: Leaving directory
make: *** [cmu60] Error 2
Run Code Online (Sandbox Code Playgroud)

make[1]: Entering directory
/bin/sh: line 0: test: too many arguments
./dpp -DSTRESS -DMPI -P -D'pointer=integer'-I/opt/mpich_intel/include  angfrc.f > angfrc.tmp.f
/bin/sh: ./dpp: Permission denied
make[1]: *** [angfrc.o] Error 126
make[1]: Leaving …
Run Code Online (Sandbox Code Playgroud)

make error-handling gnu-make

28
推荐指数
2
解决办法
16万
查看次数

如果命令失败,不要停止 make'ing,但检查退出状态

我试图指示 GNU Make 3.81 在命令失败时不要停止(所以我在命令前加上-),但我还想检查下一个命令的退出状态并打印一条信息更丰富的消息。但是我下面的 Makefile 失败了:

$ cat Makefile 
all:
    -/bin/false
    ([ $$? -eq 0 ] && echo "success!") || echo "failure!"
$
$ make
/bin/false
make: [all] Error 1 (ignored)
([ $? -eq 0 ] && echo "success!") || echo "failure!"
success!
Run Code Online (Sandbox Code Playgroud)

为什么上面的 Makefile 回显“成功!” 而不是“失败!” ?

更新:

遵循并扩展已接受的答案,以下是它的书写方式:

failure:                                                                                                                                                                                                                                      
    @-/bin/false && ([ $$? -eq 0 ] && echo "success!") || echo "failure!"                                                                                                                                                                 
success:                                                                                                                                                                                                                                      
    @-/bin/true && ([ $$? -eq 0 ] && echo "success!") || echo …
Run Code Online (Sandbox Code Playgroud)

make gnu-make

28
推荐指数
3
解决办法
7万
查看次数

在 Makefile 中检查环境变量的值

我有一个 Makefile 目标,我必须在其中检查环境变量的值。但是,我没有得到它的确切语法。努力了,还是没找到。任何帮助表示赞赏。

环境变量名称:TEST,其值:“TRUE”

test_target: 
    ifeq ($(TEST),"TRUE")
            echo "Do something"
    endif
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

/bin/sh: -c: line 0: syntax error near unexpected token `"TRUE","TRUE"'
/bin/sh: -c: line 0: `ifeq ("TRUE","TRUE")'
Run Code Online (Sandbox Code Playgroud)

shell make

28
推荐指数
2
解决办法
7万
查看次数

如何将makefile中给出的依赖项显示为树?

问题

我想查看一个 makefile 的一个或多个目标的依赖关系。所以我正在寻找一个程序,它可以解析生成文件,然后以某种树状格式(缩进,ascii-art,...)或图形(点,...)表示依赖关系。

相似的

有些程序可以针对其他情况执行此操作:

  • pactreeDebree可以以树状(如 ascii 格式或dot图形)的形式显示软件包的依赖关系,
  • gcc -M source_file.c 将 C 源文件的依赖项显示为 make 规则,
  • pstree显示进程树的 ascii 表示。

进步

在网上搜索我发现几乎没有帮助。这让我尝试

make --always-make --silent --dry-run some_target | \
  grep --extended-regexp 'Considering target file|Trying rule prerequisite'
Run Code Online (Sandbox Code Playgroud)

但看起来我必须在 perl 或 python 中编写更多解析代码才能将其表示为一个漂亮的树/图。而且我还不知道我是否真的会以这种方式获得完整和正确的图表。

要求

以某种方式限制图形会很好(没有内置规则,只有给定的目标,只有一定的深度),但在大多数情况下,我只是在寻找一种工具,它会给我一些“合理”的依赖关系,人类- 可视格式(就像“类似”下的程序一样)。

问题

  • 有没有可以做到这一点的程序?
  • 我会从 获得完整和正确的信息make -dnq ...吗?
  • 有没有更好的方法来获取这些信息?
  • 解析此信息的脚本/尝试是否已经存在?

make text-processing gnu-make

26
推荐指数
2
解决办法
2万
查看次数

.PHONY GNU make 文件中的所有规则?

我的解释是否错误,我应该在所有制定规则之前将其放在首位:

.PHONY: all of my rules

all:
    echo "Executing all ..."

of:
    echo "Executing of ..."

my:
    echo "Executing my ..."

rules:
    echo "Executing rules ..."
Run Code Online (Sandbox Code Playgroud)

是否有过您不想遵循这个“公式”的情况?

http://www.gnu.org/software/make/manual/make.html#Phony-Targets

make

23
推荐指数
1
解决办法
2万
查看次数

如何将 bash 脚本准确地写入 Makefile 中?

我喜欢打 bash 脚本,但是如果我准备了多个工具,项目的根目录就塞满了这么多的 shell 脚本。这就是我更喜欢使用 Makefile 的原因。

Makefile 很好。但是,我想像构建常规 bash 脚本一样构建我的 makefile。

例如:

以为自己很快写了一个bash脚本,内容如下:

#!/bin/bash
echo "hello"
cd ~
do-some-work.sh my-parameter
Run Code Online (Sandbox Code Playgroud)

我可以用$ ./my-important-task.sh.

如果我想将该脚本移动到 makefile 中,我应该执行以下操作:

SHELL := /bin/bash 

my-important-task: 
    echo "hello" ;\
    cd ~ ;\
    do-some-work.sh my-parameter
Run Code Online (Sandbox Code Playgroud)

但我想要以下内容:

my-important-task: 
    [[copy and paste the my-important-task.sh file]]
Run Code Online (Sandbox Code Playgroud)

有没有办法实现这个目标?

bash make

20
推荐指数
3
解决办法
7万
查看次数

“make install”和“sudo make install”之间的区别

有时我在使用时遇到问题,在写入某些文件夹时make install会出现permission denied错误。所以我本能地使用sudo make install. 这会带来额外的问题吗?

我正在使用 Debian Etch。

make sudo software-installation

19
推荐指数
2
解决办法
7万
查看次数

从源安装。如何在不破坏包管理器的情况下解决依赖关系

编译和安装软件是我无法克服的痛苦和问题。我只是想通过我对这个过程的理解,与知识渊博的人一起来清理我的思想,以进入下一个层次。

我需要的许多科学软件都不是作为包分发的。我知道“./configure”设置编译变量并检查依赖项“make”是否编译“sudo make install”将所有库和bins放在它们的位置。然而,它永远不会奏效。我很少在不进入依赖关系的情况下退出 a) “./configure” 阶段,如果我这样做,b) “sudo make install”可能会毁了我的盒子。

a) 依赖地狱非常令人沮丧。有时我有图书馆,但它不喜欢它。或者库不想安装。或者“配置”找不到。或者我的发行版把它放在不应该放在的地方。或者我的系统中有两个版本。问题是,我无法理解如何诊断并因此解决这些问题。对于不需要成为程序员的人来说,有哪些好的参考可以学习?

b) 我的理解是“make install”将替换一些库并更改设置,而我的包管理器不知道这一点。因此,有些程序无法运行,有些程序无法更新。所以,如果我不使用“make install”,而只是将编译后的二进制文件保存在我的用户目录中,并在 PATH 中添加一个符号链接,我会清楚吗?

我的盒子是单用户,有大量的免费高清,所以如果能解决我的问题,我真的不在乎拥有多个(几十个)库副本。空间便宜。

make software-installation

19
推荐指数
1
解决办法
9293
查看次数