gcc

使用gcc,程序员可以对编译过程有更多的控制,编译过程分为3个阶段。

-预处理

-汇编

-链接

程序员可以再编译的任何阶段结束后停止整个编译过程以检查编译器在该阶段输出的信息

示例

#include <stdio.h>
int main(int arg, char *args[])
{if (arg < 3)printf("请输入2个参数\n");else{int a = atoi(args[1]);int b = atoi(args[2]);printf("%d 加 %d 等于 %d\n", a, b, a + b);}return 0;
}

在命令行键入命令编译和运行这段程序

$gcc -o hello hello.c

这行命令告诉gcc对源程序hello.c进行编译和链接,并使用参数-o指定创建名为hello的可执行程序。

整个过程看上去仿佛是一气呵成的,但其实是编译过程分几步的

编译过程

-预编译源代码;

-编译目标代码;

-链接程序

预编译

$gcc -o hello1.c -E hello.c

这行命令告诉gcc对源程序hello.c进行预编译,预编译结果输出到hello1.c文件中

编译

$gcc -o hello.o -c hello1.c

这行命令告诉gcc对源程序hello.c进行编译,但不链接,编译输出到hello.o文件中

链接

$gcc -o hello hello.o

这行命令告诉gcc对源程序hello.o进行链接,生成可执行程序hello

gcc常用选项

make

makefile是一个文本形式的脚本文件,其中包含一些规则告诉make编译哪些文件,怎么样编译以及在什么条件下编译。

makefile规则遵循以下通用形式

target:dependency [dependency[…]]

command

command

[…]

每个command第一个字符必须是tab键,而不是空格键,不然make会报错并停止

makefile示例

start:hello.ogcc -o hello hello.ohello.o:gcc -o hello.o -c hello.c
clean:rm -f hello.o

说明

target start后面的hello.o代表其下的command依赖与hello.o这个target。所以make先执行了hello.o这个target下的command

输入make clean,make会直接执行clean其下的command

makefile变量

varname=some_text

把变量用括号括起来,前面加$就可以引用该变量的值。 $(varname)

示例

CC=gccstart:hello.o$(CC) -o hello hello.o@echo '---------------ok---------------'hello.o:$(CC) -o hello.o -c hello.cclean:rm -f hello.o

gdb

启动gdb gdb 程序名 [corefile]

corefile是可选的,但能增强gdb的调试能力。

Linux默认是不生成corefile的,所以需要在.bashrc文件中添加

ulimit -c unlimited (修改完.bashrc文件后记得 . .bashrc 让修改生效)

gdb最有用的功能之一就是它可以显示被调试程序中任何表达式、变量的值

C++笔记--Linux编程(8)-gcc gbb make相关推荐

  1. linux6.3支持gcc版本,Linux编程中GCC对C++标准支持和如何选择GCC版本使用

    关注公众号cpp_coder,学习更多实用技术. [说明]本公众号纯属于个人,没有商业运作.推送文章是C++技术网原创文章,供大家学习.希望大家多多支持,多多推荐.我们所有的推送,没有收入一分钱,只是 ...

  2. 《Linux编程》学习笔记 ·002【Linux常用工具GCC、GDB、Make】

    注:前言.目录见 https://blog.csdn.net/qq_44220418/article/details/108428971 文章目录 一.GCC编译器 1.GCC编译程序的流程 2.GC ...

  3. linux实验五编程淮海工学院,实验一-LinuxC编程工具GCC和GDB.doc

    实验一-LinuxC编程工具GCC和GDB 淮海工学院计算机工程学院实验报告书 课程名: <Linux程序设计> 题 目: 实验一 Linux C编程工具:GCC和GDB 班 级: 软件1 ...

  4. linux怎么用gcc运行程序设计,linux应用程序设计--GCC程序编译

    GCC程序编译 linux系统下的GCC(GNU C Compiler)是GNU推出的功能强大.性能优越的多平台编译器,是GNU的代表作之一.GCC可以在多种硬件平台上编译出可执行程序,其执行效率与一 ...

  5. 学习linux编程(一)

    本文导航 一. Linux基础知识杂记 0. terminal操作快捷键等 1. 为什么vfork的子进程里用return,整个程序会挂掉,而且exit不会(zz) 2. 进程内存管理详解 3. 关于 ...

  6. 在Linux下gcc缺省编译,在Linux下用gcc编译hello world

    1. 确保Linux系统里已经装好了gcc 测试:输入gcc后是如下的结果就说明已经安装成功 2. 创建HelloWorld.c 使用 touch 创建一个空文件; 用vim编辑 按下A或者I 插入 ...

  7. 学习Unix/Linux编程要学些什么

    最近利用空余时间看了一下<Unix/Linux编程实践教程>,原书名为:Understanding Unix/Linux Programming: A Guide to Theory an ...

  8. Linux编程获取网络信息总结

    Linux下C获取所有可用网卡信息 在Linux下开发网络程序时,经常会遇到需要取本地网络接口名.IP.广播地址 .子网掩码或者MAC地址等信息的需求,最常见的办法是配合宏SIOCGIFHWADDR. ...

  9. 笔记:编程的一些建议 - 时间伙伴 - 博客园

    笔记:编程的一些建议 0.今天偶然和同学聊到Eric Steven Raymond的<大教堂与集市>,想起可能会有些同学没看过,给个链接吧.http://www.yeeyan.com/ar ...

最新文章

  1. 至强® 平台配备先进遥测技术让您的数据中心更智能
  2. 单链表——判断一个单链表中是否有环
  3. 【机器学习】改善LBP特征提高SVM的可分性的经验总结(二)
  4. 全球及中国塑料包装行业发展方向与应用前景调研报告2022版
  5. 大咖分享,带你洞悉畅销游戏背后的数字化运营落地实践
  6. SwiftUI之深入解析高级动画的几何效果GeometryEffect
  7. Prime Count 求大区间素数个数
  8. flask mysql orm,flask的orm框架(Flask-SQLAlchemy)-创建表
  9. 【Java】欧拉回路的判定
  10. dj鲜生-08-用户注册的功能-上-实现注册的主逻辑和其本的验证功能-伴随着调试
  11. 数字图像处理与python实现 岳亚伟_数字图像处理与Python实现
  12. 通过反射修改强转值类型_什么是反射机制?反射机制的应用场景有哪些?
  13. 【pytest之allure测试报告使用】
  14. 网上赚钱新途径:这些方法简单又有效!
  15. windows下GMT绘制矢量图
  16. 一款综合短网址缩短和还原源码
  17. 关于H.265/HEVC视频压缩标准相较H.264/AVC节省50%左右的带宽方案的推荐
  18. 网络初级 关于ensp动态路由rip协议
  19. 安装tensorflow的GPU版本(详细图文教程)--CUDA11.6的安装
  20. pycharm设置ctrl+滚轮实现字体缩放

热门文章

  1. 记录一次使用poi的HSSFWorkbook内存溢出问题
  2. LaTex中箭头的表示方法
  3. 辛巴巴巴鲁比啦音乐计算机版,抖音辛巴巴巴鲁比拉是什么歌 辛巴巴巴鲁比啦完整歌曲歌词...
  4. 工具使用 - idea - 导入新项目环境配置
  5. 03_TemplateMethod-笔记
  6. 《Metasploit渗透测试魔鬼训练营》
  7. 哈希函数处理冲突的方法
  8. java.李雷和韩梅梅的加密纸条
  9. 如何组装一台安全机器人?天线是必不可少的组件
  10. Tableau可视化——超市常见问题分析