文档章节

在 Makefile 里加入调试选项

sfyumi
 sfyumi
发布于 2014/06/04 21:38
字数 311
阅读 1675
收藏 2

gcc 编译选项

-c            Compile and assemble, but do not link
-o <file>     Place the output into <file>
-g            Generate debug information in default format

简单的 Makefile 一般只用到前两项 gcc 选项,如果需要调试程序的话就用到第三个调试选项了。

一个简单的 Makefile示例

此工程由三个文件组成:

printHello.h
printHello.c
main.c

printHello.h

void printHello();

printHello.c

#include <stdio.h>                                 
void printHello(){
    printf("Hello World!\n");
}

main.c

#include "printHello.h"
int main() {
    printHello();
    return 0;
}

Makefile(带调试选项)

hello : main.o printHello.o
    cc -o hello main.o printHello.o

main.o : main.c printHello.h
    cc -c -g main.c

printHello.o : printHello.c
    cc -c -g printHello.c

clean : 
    rm hello main.o printHello.o


扩展知识:

gcc编译过程分为四步

预编译过程:处理宏定义和include,并做语法检查。

编译过程:生成汇编代码。

汇编过程:生成中间目标代码。(-c)

连接过程:生成可执行代码。(-o)

关于 Makefile,可以看一下陈皓的跟我一起写 Makefile 系列文章

GDB 调试也可以看一看陈皓的用 GDB 调试程序系列文章

© 著作权归作者所有

共有 人打赏支持
sfyumi
粉丝 4
博文 12
码字总数 2324
作品 0
海淀
程序员
私信 提问
Linux内核模块LKM编译-自制Makefile模板

前段时间对内核的模块重新做了研究,对内核模块的编译流程也作了一定的了解,比起5年前有更深入的认识。 根据LDD3的内核模块makefile和原理说明,我根据自己的需要做了适当的修改使得这个Mak...

nothingfinal
2012/06/13
0
0
C++(qt)游戏实战项目:坦克大战(四)

屏幕上光有地图也不行,还需要我们的坦克加入其中 新建tank.h和tank.cpp tank.h里加入 tank.cpp main.h结构体Glo中加入选项Tank *player. mainwindow.h里加入 mainwindow.cpp构造函数里加入 ...

qq_26046771
2017/06/03
0
0
针对Web服务器总体优化

一、文件系统 在fstab里加入noatime,如 #cat /etc/fstab /dev/sda1 /home ext3 noatime,defaults 1 2 reboot或者重新mount生效 二、Tcp优化 在/etc/sysctl.conf里加入 net.ipv4.netfilter.i......

范堡
2009/05/06
408
0
GNU/Linux 常用命令与工具备忘

(1)系统管理 df 查看磁盘使用情况 top 监控cpu,内存的使用情况 ssh 安全的远程shell scp 安全的远程copy程序 bash 功能很弱小的shell环境,不过很多时候离开不了它 more 查看文件 tail 查...

最美的回忆
2017/10/09
0
0
深入理解软件包的配置、编译与安装【转】

从源代码安装过软件的朋友一定对 ./configure && make && make install 安装三步曲非常熟悉了。然而究竟这个过程中的每一步幕后都发生了些什么呢?本文将带领你一探究竟。深入理解这个过程将...

长平狐
2013/06/03
86
0

没有更多内容

加载失败,请刷新页面

加载更多

ConcurrentHashMap 高并发性的实现机制

ConcurrentHashMap 的结构分析 为了更好的理解 ConcurrentHashMap 高并发的具体实现,让我们先探索它的结构模型。 ConcurrentHashMap 类中包含两个静态内部类 HashEntry 和 Segment。HashEnt...

TonyStarkSir
今天
3
0
大数据教程(7.4)HDFS的java客户端API(流处理方式)

博主上一篇博客分享了namenode和datanode的工作原理,本章节将继前面的HDFS的java客户端简单API后深度讲述HDFS流处理API。 场景:博主前面的文章介绍过HDFS上存的大文件会成不同的块存储在不...

em_aaron
昨天
2
0
聊聊storm的window trigger

序 本文主要研究一下storm的window trigger WindowTridentProcessor.prepare storm-core-1.2.2-sources.jar!/org/apache/storm/trident/windowing/WindowTridentProcessor.java public v......

go4it
昨天
6
0
CentOS 生产环境配置

初始配置 对于一般配置来说,不需要安装 epel-release 仓库,本文主要在于希望跟随 RHEL 的配置流程,紧跟红帽公司对于服务器的配置说明。 # yum update 安装 centos-release-scl # yum ins...

clin003
昨天
9
0
GPON网络故障处理手册

导读 为了方便广大网络工作者工作需要,特搜集以下GPON网络处理流程供大家学习参考。开始—初步定为故障—检查光纤状况—检查ONU状态--检查设备运行状态—检查设备数据配置—检查上层设备状态...

问题终结者
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部