Makefile第一课:介绍

文章介绍了GCC,它是GNU项目的重要组成部分,为自由软件运动提供基础。GCC包括c++、g++等组件,以及libgcc和libstdc++等库。此外,文章还提到了GCC的默认头文件搜索路径,并强调了官方文档的重要性。
摘要由CSDN通过智能技术生成

介绍

前言

学习杜老师推荐的Makefile教程视频,链接。记录下个人学习笔记,仅供自己参考。

之前有转载过杜老师的从零Makefile落地算法大项目文章,感兴趣的可以看看。

本课程为第一课,主要讲解GCC编译器相关知识

1.GCC官方文档

GCC 的官方文档网站:https://gcc.gnu.org/onlinedocs/

  • 官方文档是最权威的,网上所有的答案都来自官方文档
  • 有问题建议Google、ChatGPT或者看官方文档

2.GCC的介绍

GCC 是 GNU项目的一个产品。GNU是一个自由软件计算,旨在创建一个完全自由的操作系统。GNU计划于1983年由理查德·斯托曼(Richard Stallman)发起,目的是为了建立一个完全自由的类Unix操作系统。目前GNU计划已经实现了许多操作系统组件,包括GCC(编译器)、GDB(调试器)等

GCC(GNU Compiler Collection,GNU编译程序集合)是最重要的开放源码软件。其他所有开放源码软件都在某种层次上依赖于它。甚至其他语言,例如 Python,都是由 C 语言开发的,由 GNU 编译程序编译的。

这个软件对于整个自由软件运动而言具有根本性的意义。如果没有它或类似的软件,就不可能有自由软件运动。GCC 为 Linux 的出现提供了可能性。

GCC 是由许多组件组成的,但它们也并不总是出现的。有些部分是和语言相关的,所以如果没有安装某种特定语言,系统中就不会出现相关的文件。

2.1 GCC常见的组成部分

  • c++: gcc 的一个版本,默认语言设置为 C++,而且在链接的时候自动包含标准 C++ 库。这和 g++ 一样
  • configure: GCC 源代码树根目录中的一个脚本。用于设置配置值和创建 GCC 编译程序必需的 make 程序文件
  • g++: gcc 的一个版本,默认语言设置为 C++,而且在链接的时候自动包含标准 C++库。这和 c++ 一样

  • gcc: 该驱动程序等同于执行编译程序和连接程序以产生需要的输出

  • libgcc: 该库包含的例程被作为编译程序的一部分,是因为它们可被链接到实际的可执行程序中。它们是特殊的例程,链接到可执行程序,来执行基本的任务,例如浮点运算。这些库中的例程通常都是平台相关的

  • libstdc++: 运行时库,包括定义为标准语言一部分的所有的 C++类和函数

2.2 GCC包含的常见的软件

  • ar: 这是一个程序,可通过从文档中增加、删除和析取文件来维护库文件。通常使用该工具是为了创建和管理连接程序使用的目标库文档。该程序是 binutils 包的一部分

  • as: GNU 汇编器。实际上它是一族汇编器,因为它可以被编译或能够在各种不同平台上工作。该程序是 binutjls 包的一部分
    autoconf:产生的 shell 脚本自动配置源代码包去编译某个特定版本的 UNIX

  • gdb: GNU 调试器,可用于检查程序运行时的值和行为
    GNATS:GNU 的调试跟踪系统(GNU Bug Tracking System)。一个跟踪 GCC和其他 GNU 软件问题的在线系统

  • gprof: 该程序会监督编译程序的执行过程,并报告程序中各个函数的运行时间,可以根据所提供的配置文件来优化程序。该程序是 binutils 包的一部分

  • ld: GNU 连接程序。该程序将目标文件的集合组合成可执行程序。该程序是 binutils 包的一部分

  • libtool: 一个基本库,支持 make 程序的描述文件使用的简化共享库用法的脚本

  • make: 一个工具程序,它会读 makefile 脚本来确定程序中的哪个部分需要编译和连接,然后发布必要的命令。它读出的脚本(叫做 makefile 或 Makefile)定义了文件关系和依赖关系

3.GCC默认头文件搜索路径

查看命令

echo | gcc -v -x c -E -

jetson nano为例,其默认头文件搜索路径为:

  • /usr/lib/gcc/aarch64-linux-gnu/7/include

  • /usr/local/include

  • /usr/lib/gcc/aarch64-linux-gnu/7/include-fixed

  • /usr/include/aarch64-linux-gnu

  • /usr/include

总结

本次课程主要学习了关于GCC的概念以及相关组成部分。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱听歌的周童鞋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值