当前位置: 首页 > news >正文

Linux工具 gcc makefile gdb

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

gcc GNU下的编译链接工具套组

源文件为 test.c 一个完整的编译链接生成test文件的过程如下

gcc -E -o test.i test.c # 预处理 .c->.i

gcc -S -o test.S test.i # 编译 .i->.S

gcc -c -o test test.S   # 汇编链接 .S->.o

其他参数

    -O[0|1|2|3] 优化等级

    -L DIR 链接目录

    -l FILE链接文件 不需要加空格

    -w 禁止所有警告

    -Wall 显示所有警告

 

makefile 自动化编译链接工具

make 自动检索makefile|Makefile|GNUmakefile文件来自动化编译链接

    -f 指定makefile的文件名

变量格式

OBJ = FILENAME|OTHER?

特殊变量

$@ 生成的目标文件 $^ 被依赖文件 $< 第一个被依赖文件

.PHONY: 伪目标文件列表 防止文件名与标签冲突

一个例子

目录结构如下

代码如下

/* config.h */
#define TEST 404
/* func.c */
#include <stdio.h>
#include "config.h"
void func() {
	printf("#define TEST is %d\n", TEST);
}
/* test.c */
#include <stdio.h>
int main() {
	printf("hello world\n");
	return 0;
}

手动配置makefile文件

​
test: test.c func.c
	gcc -o test test.c func.c
clean:
	rm test

利用特殊变量简写 并使用.PHONY防止文件名冲突

OBJ = test.c func.c

test: $(OBJ)
	gcc -o $@ $^

.PHONY: clean

clean:
	rm test

执行make命令 自动编译链接生成可执行文件

执行make clean命令 删除编译链接产生的文件

当有多级子目录时可使用makefile的嵌套 例子如下

.PHONY: both
both: a b c
a:
	cd subdir1; make
b:
	cd subdir2; make
c:
	cd subdir3; make

也可以下载一些自动化生成makefile的工具来生成makefile

最后生成的文件与下载安装的源码包文件非常相似

 

gdb 调试工具

编译时使用gcc -g 选项才能使用gdb调试

gdb调试交互式命令

    l 显示源代码

    r 运行

    c 继续

    b LINE 在指定行号设置断点

    bt 显示调用栈

    s 单歩执行[进入函数]

    n 单歩执行[不进入函数]

    p VAR 打印变量的值

 

转载于:https://my.oschina.net/nichijou/blog/742456

相关文章:

  • 四舍五入相关计算
  • ND4J Fast, Numerical Computing for Java
  • 实战vue项目中的 echarts实例封装。动态获取数据
  • ECMA数组原型四个常用方法(some,foreach,map,filter)讲解
  • 19.Swift中的闭包
  • 前端 precision 精度计算 封装 加减乘除
  • svn回滚到某一版本
  • 前端 延时器 setTimeout 和定时器 setInterval 注意事项
  • arcgis AE删除SDE featureClass数据
  • 蓝鸥Unity开发基础二——课时27 事件
  • 前端 获取后台某项数据 后5位用*号加密 并解析赋值传参
  • Android系统中默认值的意义列表
  • Java 接口和抽象类
  • 前端项目中react-umi框架的简单用法
  • SUID
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • angular2开源库收集
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • ES10 特性的完整指南
  • HTTP请求重发
  • js ES6 求数组的交集,并集,还有差集
  • JS字符串转数字方法总结
  • miaov-React 最佳入门
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • MySQL几个简单SQL的优化
  • Node项目之评分系统(二)- 数据库设计
  • QQ浏览器x5内核的兼容性问题
  • Shadow DOM 内部构造及如何构建独立组件
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • Webpack 4x 之路 ( 四 )
  • 从零搭建Koa2 Server
  • 大主子表关联的性能优化方法
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 我的zsh配置, 2019最新方案
  • 一起参Ember.js讨论、问答社区。
  • 硬币翻转问题,区间操作
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • ​虚拟化系列介绍(十)
  • #前后端分离# 头条发布系统
  • (C语言)fread与fwrite详解
  • (分布式缓存)Redis哨兵
  • (附源码)计算机毕业设计高校学生选课系统
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (论文阅读11/100)Fast R-CNN
  • (转) RFS+AutoItLibrary测试web对话框
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • (转)VC++中ondraw在什么时候调用的
  • .NET 中 GetHashCode 的哈希值有多大概率会相同(哈希碰撞)
  • .Net的DataSet直接与SQL2005交互
  • .NET和.COM和.CN域名区别
  • .net用HTML开发怎么调试,如何使用ASP.NET MVC在调试中查看控制器生成的html?
  • .set 数据导入matlab,设置变量导入选项 - MATLAB setvaropts - MathWorks 中国