c - gcc make 进程在做什么?

标签 c gcc makefile

所以我已经从 gcc ftp 服务器下载了 gcc-7.1.0 源码存档并且我已经这样配置它:

../configure --enable-languages=c --disable-multilib

因为子目录是我提取源代码的地方。当前目录名为“objdir”。

现在,如果我在最初大约 5 分钟后运行 make -j 2,现在大约 1 ~ 2 分钟,当我只修改项目中的单个源文件时 - CC1这实际上是我们正在编译的内容,是在 objdir/gcc 中创建/更新的,总大小约为 110MB - 一个完全可用的驱动程序,我可以使用/调试等。但是在大约 3 或 4 秒之后文件被移动到 objdir/prev-gcc 然后我只等了 20 分钟。

我想我会在 prev-gcc 目录创建后继续终止 make 进程并使用那里的内容,但我想知道这个怪癖的原因是什么。就像 make 过程将完全工作的编译二进制文件移动到 objdir/prev-gcc 然后继续做一些看似很长的事情(我记得等待一整天才能完成一次)的原因是什么,或者我是这里遗漏了一些明显的东西。

最佳答案

如果您想禁用正常的 gcc 3 阶段引导过程(用自身重建编译器来测试东西),请使用 --disable-bootstrap 作为配置选项。这会将 Makefile 配置为只构建一次 gcc。

至于默认(bootstrap)进程在做什么:

  • 使用系统编译器编译 gcc 以创建“stage1”编译器
  • 使用 stage1 编译器重新编译所有内容以生成 stage2 编译器
  • 使用 stage2 编译器重新编译所有内容以生成 stage3 编译器
  • 比较 stage2 和 stage3 编译器(二进制文件)以确保它们相同。

如果最后一次检查失败,则说明构建过程出了问题。

关于c - gcc make 进程在做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44276419/

相关文章:

我可以将 memcmp 与 qsort 一起使用吗?

c - 错误 : variable-sized object may not be initialized. 不确定为什么?

c++ - 使用所有静态库构建 GDAL

docker - 使用Makefile逐步构建Docker镜像层次结构

c++ - 在构建库之前选择选项

c - Qsort 数组 |警告 : initialization discards qualifiers from pointer target type

c++ - GCC:禁止隐式 bool->int 转换

c - 二进制搜索,strcmp C 中的两个动态字符串数组

linux - 在 Linux 内核 Makefile 中构建变量

c 结构将自身作为参数传递给指针函数