标签: make

试图执行“cc1”的 GCC 错误

我正在笔记本电脑(运行 debian 7)上为我的 Raspberry Pi 交叉编译 Linux 内核(按照Raspberry Pi Kernel Compilation 中的说明进行操作);但是在编译时

make ARCH=arm CROSS_COMPILE=${CCPREFIX}
Run Code Online (Sandbox Code Playgroud)

我收到以下消息:

  CHK     include/linux/version.h
  CHK     include/generated/utsrelease.h
make[1]: `include/generated/mach-types.h' is up to date.
  CC      kernel/bounds.s
gcc: error trying to exec 'cc1': execvp: No such file or directory
make[1]: *** [kernel/bounds.s] Error 1
make: *** [prepare0] Error 2
Run Code Online (Sandbox Code Playgroud)

我认为问题是找不到 cc1 或者gcc没有正确安装(所以我重新安装了 gccapt-get --reinstall install gcc但没有运气)。

gcc -v 给出:

Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/i486-linux-gnu/4.7/lto-wrapper
Target: i486-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Debian 4.7.2-5' --with-bugurl=file:///usr/share/doc/gcc-4.7/README.Bugs …
Run Code Online (Sandbox Code Playgroud)

make gcc cross-compilation

12
推荐指数
1
解决办法
3万
查看次数

如何编写 menuconfig 脚本来自动化 Linux 内核构建配置?

我想自动化一个 Linux 构建,但最终我需要运行一个看起来非常手动的步骤:make menuconfig. 这似乎在操作系统和内核配置之间同步配置?

cp git-tracked-config .config
make defconfig 
make menuconfig # <- how to automate/script this?
make V=s
Run Code Online (Sandbox Code Playgroud)

基本上,如何删除对make menuconfig构建脚本的调用?

顺便说一句,这是对构建错误的反应,该错误似乎在我从未调用 make menuconfig 的情况下运行时发生:

make[1]: *** No rule to make target `include/config/auto.conf', needed by `include/config/kernel.release'.  Stop.
Run Code Online (Sandbox Code Playgroud)

似乎在 makefile 中缺少规则,可能是因为 makefile 本身不存在,或者 makefile 尚未生成/变形以包含该规则,但这是一个单独的问题。

可能有一种更聪明的方法来解决这个问题。是否还有其他我没有跟踪但应该跟踪的配置(例如 oldconfig)?

bash make linux-kernel

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

make如何继续编译?

我知道我可以make随时中断进程,而无需再次重新编译整个源代码树。据我所知,make只有在尚未编译的情况下才编译目标,或者在上次编译后修改了源代码。
但是如果我中断make,肯定会有一个或多个(取决于并发级别)半就绪的二进制文件。下次我跑步时,它们对我有make什么作用?或者当我按Ctrl+C以避免部分编译的二进制文件时它是否完成了当前目标?

linux compiling make compiler interrupt

11
推荐指数
2
解决办法
7471
查看次数

makefile 中的文件函数采用以“@”符号为前缀的 args

这段代码摘自 GNU makefile 手册的第 8.6 章。

makefile 中文件函数 arg 的 @$@.in 是什么意思?以及为什么像 rm 这样的 shell 命令以“@”符号为前缀

program: $(OBJECTS)
     $(file >$@.in,$^)
     $(CMD) $(CMDFLAGS) @$@.in
     @rm $@.in
Run Code Online (Sandbox Code Playgroud)

文件函数语法是

$(file op filename[,text])
Run Code Online (Sandbox Code Playgroud)

make

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

make-kpkg 和 make deb-pkg 的区别

我想知道make-kpkg和之间的确切区别make deb-pkg这个问题问了几乎相同的问题,但没有令人满意的答案。以前我使用

make -j `getconf _NPROCESSORS_ONLN` deb-pkg
Run Code Online (Sandbox Code Playgroud)

编译内核源代码树并生成 header+kernel-image debian 包。我发现它非常慢,因为在我的第二代 Intel i3 CPU 上编译需要 1 个多小时。然后我找到了另一种方法,make-kpkg它比deb-pkg我以前使用的方法快 5-6 倍。我运行的代码

fakeroot make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headers  -j `getconf _NPROCESSORS_ONLN`
Run Code Online (Sandbox Code Playgroud)

编译和生成 deb 包只需要 10-15 分钟。在这两个编译过程中,作业是分开的,_NPROCESSORS_ONLN那么有什么区别呢?提前致谢。

compiling make debian linux-kernel

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

是什么导致Make删除中间文件?

我写了一个Makefile,发现在执行make命令时,rm在Mmakefile中的所有命令都完成后执行了一个意外。但是我没有rm在Makefile中写命令。

run-%: d/%.out
    $<

d/%.out: d/%.c
    gcc -o $(subst .c,.out,$<) $<
Run Code Online (Sandbox Code Playgroud)

运行输出make run-a

gcc -o d/a.out d/a.c
d/a.out
rm d/a.out
Run Code Online (Sandbox Code Playgroud)

注意rm d/a.out我没有写的尾随。

什么情况下会rm添加自动命令?

make

11
推荐指数
1
解决办法
2058
查看次数

通过 Makefile 将目录添加到 PATH

我在将我在 Makefile 中修改的 PATH 导出到当前终端时遇到了一些麻烦。我正在尝试添加到 PATH,即 Makefile 目录所在的 bin 文件夹。

这是 makefile 的相关片段:

PATH := $(shell pwd)/bin:$(PATH)

install:
    mkdir -p ./bin 
    export PATH
    echo $(PATH)
Run Code Online (Sandbox Code Playgroud)

echo 打印正确,但如果我在终端中重做 echo,PATH 保持不变。

make path environment-variables

10
推荐指数
3
解决办法
6万
查看次数

在 GNU Make 文件中使用哪个 shell?

我在 makefile 规则中看到过诸如echo, mv, if, 之类的东西for。似乎可以识别某种 shell 命令。这是 bash 吗?如何确定正在使用哪个 shell 以及我可以使用的完整关键字列表?

make

10
推荐指数
2
解决办法
7493
查看次数

默认使用多线程make?

有什么方法可以在系统范围内make使用多线程(6 个线程在我的系统上是理想的),而不是仅仅添加-j6到命令行?那么,如果我跑了make,它的作用就和我在跑一样make -j6?我想要这个功能,因为我使用pacaur(我在 Arch 上)从 AUR 安装了很多包,所以我不直接运行 make 命令,但我仍然希望多线程更快地构建包。

command-line compiling make multithreading

10
推荐指数
1
解决办法
8368
查看次数

Makefile命令替换

我的生成文件:

all: ...(other rules) clean

clean:
    rm $(find . -type f -executable)
Run Code Online (Sandbox Code Playgroud)

当我clean从上面的 Makefile 中删除规则时,一切都按预期工作。添加后,make(也make clean)命令结果为:

rm 
rm: missing operand
Try 'rm --help' for more information.
make: *** [Makefile:46: clean] Error 1
Run Code Online (Sandbox Code Playgroud)

是什么原因导致这里出现问题以及如何解决?

make gnu-make command-substitution

10
推荐指数
1
解决办法
5003
查看次数