gcc makefile文件的编写

合集下载

c语言makefile编写实例

c语言makefile编写实例

c语言makefile编写实例Makefile是用来管理程序编译的工具,可以方便地管理程序的编译过程。

使用Makefile可以大大简化程序的编译过程,提高程序的可维护性。

Makefile的语法比较简单,主要由目标、依赖和命令三部分组成。

下面我们以一个简单的C程序为例,来介绍如何使用Makefile进行编译。

假设我们有一个名为hello.c的程序,代码如下:```c#include <stdio.h>int main(){printf("Hello, world!\n");return 0;}```我们需要使用gcc编译器将其编译成可执行文件。

下面是一个简单的Makefile:```makefilehello: hello.cgcc -o hello hello.c```这个Makefile很简单,它定义了一个名为hello的目标,该目标依赖于hello.c文件,并使用gcc命令将其编译成可执行文件。

如果我们在终端中输入make命令,Makefile会自动执行编译过程:```$ makegcc -o hello hello.c```Makefile还可以定义多个目标,每个目标可以有多个依赖和多个命令。

下面是一个稍微复杂一些的Makefile:```makefileCC=gccCFLAGS=-Wall -gall: hello goodbyehello: hello.o$(CC) $(CFLAGS) -o hello hello.ogoodbye: goodbye.o$(CC) $(CFLAGS) -o goodbye goodbye.ohello.o: hello.c$(CC) $(CFLAGS) -c hello.cgoodbye.o: goodbye.c$(CC) $(CFLAGS) -c goodbye.cclean:rm -f *.o hello goodbye```这个Makefile定义了两个目标:all和clean。

交叉编译makefile编写

交叉编译makefile编写

交叉编译makefile编写交叉编译Makefile编写在软件开发中,我们通常会遇到需要在不同平台上编译程序的情况。

当我们需要在一台主机上编译运行另一种架构的程序时,就需要进行交叉编译。

而Makefile作为一种构建工具,可以帮助我们自动化编译过程,提高开发效率。

本文将介绍如何编写适用于交叉编译的Makefile,以实现在不同平台上的程序构建。

一、了解交叉编译概念交叉编译是指在一台主机上编译生成另一种架构的可执行文件。

通常情况下,我们在本机上编写并编译程序,然后在本机上运行。

但是,当我们需要在不同的平台上运行程序时,由于不同平台的指令集、库文件等差异,我们就需要使用交叉编译来生成适用于目标平台的可执行文件。

二、Makefile的基本结构Makefile是一种用于描述程序构建过程的文件,它包含了一系列规则(rules),每个规则由一个或多个目标(target)和依赖项(dependencies)组成。

当某个目标的依赖项发生变化时,Make工具会根据规则自动更新目标文件。

一个基本的Makefile结构如下所示:```target: dependenciescommand```其中,target表示目标文件,dependencies表示目标文件的依赖项,command表示生成目标文件的命令。

三、交叉编译的Makefile编写在编写交叉编译的Makefile之前,我们需要了解目标平台的相关信息,如架构、编译器、库文件等。

以ARM架构为例,我们可以使用arm-linux-gnueabi-gcc作为交叉编译器。

我们需要定义一些变量,用于指定交叉编译工具链和相关参数:```CC = arm-linux-gnueabi-gccCFLAGS = -Wall -O2```其中,CC表示编译器,CFLAGS表示编译参数。

接下来,我们可以定义目标文件和依赖项:```TARGET = myprogramSRCS = main.c foo.c bar.cOBJS = $(SRCS:.c=.o)```其中,TARGET表示目标文件,SRCS表示源文件列表,OBJS表示目标文件列表。

makefile编写规则

makefile编写规则

makefile编写规则⼀、makefile 规则:⼀般开头都是 Tab ,不能空格, include 前⾯不能是 Tab; 1、如果没编译过,将所有的(.c)⽂件编译并且链接; 2、如果有其中的(.c)⽂件改变,编译并链接改变的⽂件; 3、如果(.h)⽂件被修改,编译引⽤相应的(.c)⽂件, 链接; 4、在随意修改时间的情况下,会导致编译过程中⽣成的(.o 中间⽂件)与可执⾏⽂件时间不⼀致,此时会编译相应的⽂件,并链接,最终编译成可执⾏⽂件;⼆、第⼀版 makefile: 例如有2个 .h ⽂件(utils.h, player.h, actor.h)和 3个 .c ⽂件( main.c, player.c, actor.c)需要编译链接:/*****main.c*********/#include "utils.h"#include "player.h"void main() {// do something}/*******player.c**********/#include "utils.h"#include "actor.h"bool create_player() {// do something}/****actor.c************/#include "utils.h"bool create_actor() {// do something}/********* makefile *****************/test : main.o actor.occ -o test main.o actor.omain.o : main.c utils.h player.h actor.hcc -c main.cpalyer.o: player.c player.h actor.h utils.hcc -c player.cactor.o: actor.h utils.hcc -c actor.cclean:rm test ain.o player.o actor.o 优点:可毒性很强,思路清晰明了; 缺点:⿇烦,重复的依赖过多,当需要编译⼤量⽂件时容易出错;第⼆版:利⽤ makefile 的变量;/********* makefile *****************/OBJ = main.o actor.o // 跟第⼀版⽐较,唯⼀的区别在这test : $(OBJ) // 这⼉cc -o test $(OBJ) // 这⼉main.o : main.c utils.h player.h actor.hcc -c main.cpalyer.o: player.c player.h actor.h utils.hcc -c player.cactor.o: actor.h utils.hcc -c actor.c .PHONY : clean // 伪⽬标,避免:如果当前⽬录下存在 clean rm 指令不执⾏clean:-rm test $(OBJ) // 前⾯的(-)表⽰,执⾏过程中不 care 出错;第三版:利⽤ GUN make 的⾃动推导规则 当 make 看到(.o )⽂件,他会⾃动把(.c)⽂件加上依赖关系,包括执⾏的语句(cc -c xx.c);/********* makefile *****************/OBJ = main.o actor.o // 跟第⼀版⽐较,唯⼀的区别在这test : $(OBJ) // 这⼉cc -o test $(OBJ) // 这⼉main.o : utils.h player.h actor.hpalyer.o: player.h actor.h utils.hactor.o: actor.h utils.h .PHONY : clean // 伪⽬标,避免:如果当前⽬录下存在 clean rm 指令不执⾏clean:-rm test $(OBJ)第四版:对第三版的整理(有⼀些重复的 .h) 公共的⼀起依赖,单独的单独依赖/********* makefile *****************/OBJ = main.o actor.o // 跟第⼀版⽐较,唯⼀的区别在这test : $(OBJ) // 这⼉cc -o test $(OBJ) // 这⼉$(OBJ) : utils.h actor.omain.o player.o .PHONY : clean // 伪⽬标,避免:如果当前⽬录下存在 clean rm 指令不执⾏clean:-rm test $(OBJ)优点:简洁缺点:不好理解以上的makefike⽂件的基本写法;或许你也发现了,如果有⼏百个源⽂件咋整呢,光是⽬录就要晕死,下⾯就是针对这种情况来说⼀下⼤型⼯程 makefile 的编写设计⼆、⼤型项⽬makefile编写: Makefile 同样也有像 c / c++ 类似的include功能; 例如我们有⼀堆 a.mk , b.mk以及 foo.make和⼀个变量 $(bar),其包含了 e.mk,f.mk, 那么 include foo.make *.mk $(bar) ------- 等价-------》 include foo.make a.mk b.mk e.mk f.mk。

c++的makefile实例

c++的makefile实例

1. 将上述代码保存到一个名为 "Makefile"(注意大小写)的文件中。 2. 将 "your_program" 替换为你的目标程序的名称。 3. 将 "main.cpp"、"file1.cpp" 和 "file2.cpp" 替换为你的源代码文件的名称(如果有更 多文件,可以继续添加)。 4. 运行命令 `make` 来编译和构建你的程序。
c++的makefile实例
- `%.o: %.cpp`:这个规则用于编译每个源代码文件。它将每个 .cpp 文件编译为对应的 .o 文件。
- `clean`:这个规则用于清理生成的目标文件和目标程序。
你可以根据你的实际需要修改和调整这个 Makefile,例如添加其他编译选项、链接库等 。运行命令 `make clean` 可以删除生成的目标文件和目标程序。
all: $(TARGET)
$(TARGET): $(OBJS) $(CC) $(CFLAGS) -o $@ $^
%.o: %.cpp $(CC) $(CFLAGS) -c $< -o $@
clean:
rm -f $(OBJS) $(TARGET)

c++的makefile实例
在这个示例中,你需要做以下几个步骤:
c++的makefile实例
这个 Makefile 的规则解释如下:
- `CC`:定义了编译器的名称(在这里使用了 g++)。 - `CFLAGS`:定义了编译器的选项(在这里使用了 -std=c++11 和 -Wall)。 - `TARGET`:定义了目标程序的名称。 - `SRCS`:定义了源代码文件的名称。 - `OBJS`:定义了目标文件的名称(通过将源文件的扩展名 .cpp 替换为 .o 而得到)。 - `all`:这是一个默认目标,用于构建目标程序。它依赖于 $(TARGET)。 - `$(TARGET)`:这个规则用于构建目标程序。它依赖于 $(OBJS)。通过 $(CC) 命令将目 标文件链接在一起生成最终的可执行文件。

C++Makefile文件编写

C++Makefile文件编写

C++Makefile⽂件编写
对现有的⼀个C++动态库⽂件和调⽤程序,分别编写Makefile⽂件,从零开始,这⾥把⾃⼰弄明⽩的⼀些东西分享给⼤家。

1、必须明确Linux下,C++的编译器是g++,C语⾔的是gcc。

⽹上⼤多数⼜是以.c⽂件编写的makefile⽰例,所⽤的编译器是gcc,如果
C++写成了gcc,C语⾔中没有类,会显⽰class未知的定义错误。

2、当有⼀个或多个动态库时,应该为每个动态库都写⼀个Makefile⽂件,为调⽤动态库的程序写⼀个Makefile⽂件,⽽不是写在⼀起,这样才⽅便之后的修改维护。

3、Makefile的基本语句是确定的,当我们要使其易修改时,会预先定义⼀些变量,代表⽂件所在的路径,其实路径是可以组合的,我们要写的就是让编译器能找到需要的⽂件。

介绍我需要写makefile⽂件时的情况。

⼀个动态库⽂件,动态库⽂件中引⽤了外部的头⽂件。

Makefile⽂件执⾏编译的时候,先将.cpp⽂件转换成.o⽂件,在这个构成中依赖.cpp⽂件(源⽂件),以及.cpp中引⽤了的头⽂件。

⼀句句解释上⾯这个为动态库⽂件写的Makefile⽂件:
1' CC指定编译器是g++,代表C++编译器,后⾯出现的CC都表⽰g++;
2' INCLUDE指定头⽂件路径,⼀般的,程序⾃⼰写的头⽂件⽤相对路径,如果不是把动态库⽂件的头⽂件复制到⾃⼰写的⼯程⽂件中的话,就⽤绝对路径指向动态库⽂件的头⽂件;有多个头⽂件路径需要添加时,在路径前添加-I,不要有空格;
3' DLL_OBJ代表要⽣成的动态库⽂件
4' 5' 设定⽬录。

makefile编译流程

makefile编译流程

makefile编译流程Makefile是一种用于自动化编译的工具,它可以根据源代码文件的依赖关系自动编译出目标文件。

Makefile的编写需要遵循一定的规则和语法,下面将介绍Makefile的编译流程。

1. 编写Makefile文件Makefile文件是一个文本文件,其中包含了编译的规则和依赖关系。

在编写Makefile文件时,需要遵循一定的语法规则,如使用TAB键缩进、使用变量和函数等。

2. 执行make命令在Makefile文件所在的目录下执行make命令,make会自动读取Makefile文件,并根据其中的规则和依赖关系进行编译。

如果Makefile文件中没有指定目标,则默认编译第一个目标。

3. 分析依赖关系在执行make命令时,make会先分析Makefile文件中的依赖关系,确定哪些文件需要重新编译。

如果某个源文件被修改了,那么与之相关的目标文件也需要重新编译。

4. 编译源文件在确定需要重新编译的文件后,make会依次编译每个源文件,生成对应的目标文件。

编译过程中,make会根据Makefile文件中的规则和命令进行编译。

5. 链接目标文件在所有的源文件都编译完成后,make会将所有的目标文件链接起来,生成最终的可执行文件。

链接过程中,make会根据Makefile文件中的规则和命令进行链接。

6. 完成编译当所有的源文件都编译完成并链接成功后,make会输出编译成功的信息,并生成最终的可执行文件。

如果编译过程中出现错误,make会输出错误信息并停止编译。

总之,Makefile编译流程是一个自动化的过程,它可以大大提高编译的效率和准确性。

在编写Makefile文件时,需要注意语法规则和依赖关系,以确保编译过程的正确性。

makefile基本使用方法

makefile基本使用方法

makefile基本使用方法makefile是一种用来管理和自动化构建程序的工具。

它可以根据源代码文件的依赖关系和编译规则来自动构建目标文件和可执行文件。

makefile的基本使用方法如下:1. 创建makefile文件:在项目的根目录下创建一个名为makefile 的文件。

2. 定义变量:在makefile中,可以使用变量来存储一些常用的参数和路径,以便于后续的使用。

例如,可以定义一个名为CC的变量来指定编译器的名称,如:CC=gcc。

3. 编写规则:在makefile中,可以使用规则来指定如何编译源代码文件和生成目标文件。

一个规则由两部分组成:目标和依赖。

目标是要生成的文件,依赖是生成目标文件所需要的源代码文件。

例如,可以编写以下规则:```target: dependency1 dependency2command1command2```其中,target是目标文件,dependency1和dependency2是依赖的源代码文件,command1和command2是生成目标文件所需要执行的命令。

4. 编写默认规则:在makefile中,可以使用一个默认规则来指定如何生成最终的可执行文件。

默认规则的目标通常是可执行文件,依赖是所有的源代码文件。

例如,可以编写以下默认规则:```all: target1 target2```其中,target1和target2是生成的目标文件。

5. 编写clean规则:在makefile中,可以使用clean规则来清理生成的目标文件和可执行文件。

例如,可以编写以下clean规则: ```clean:rm -f target1 target2```其中,target1和target2是要清理的目标文件。

6. 运行make命令:在命令行中,使用make命令来执行makefile 文件。

make命令会自动根据规则和依赖关系来编译源代码文件和生成目标文件。

例如,可以运行以下命令:``````make命令会根据makefile文件中的规则和依赖关系来编译源代码文件并生成目标文件和可执行文件。

MakeFile详解

MakeFile详解

引用其它的Makefile-实例



有这样几个Makefile:a.mk、b.mk、c.mk,还有 一个文件叫foo.make,以及一个变量$(bar),其 包含了e.mk和f.mk,那么,下面的语句: include foo.make *.mk $(bar) 等价于: include foo.make a.mk b.mk c.mk e.mk f.mk

在大多数时候,由于源文件太多,编译生成的中间目标文 件太多,而在链接时需要明显地指出中间目标文件名,这
对于编译很不方便,所以,通常要给中间目标文件打个包,
在Windows 下这种包叫“库文件”(Library File),也就 是 .lib 文件,在UNIX 下,是Archive File,也就是 .a 文件。
定义变量和引用变量
变量的定义和应用与Linux环境变量一样,变量名 要大写,变量一旦定义后,就可以通过将变量名 用圆括号括起来,并在前面加上“$”符号来进行 引用。 变量的主要作用: 1、保存文件名列表 2、保存可执行命令名,如编译器 3、保存编译器的参数 变量一般都在makefile的头部定义。按照惯例, 所有的makefile变量都应该是大写。
者,通常是你需要告诉编译器头文件的所在位置,只要所有的语法正
确,编译器就可以编译出中间目标文件。一般来说,每个源文件都应 该对应于一个中间目标文件(O 文件或是OBJ 文件)。
孙钦东
程序的编译和链接

链接时,主要是链接函数和全局变量。链接器并不管函数
所在的源文件,只管函数的中间目标文件(Object File)。



clean: -rm -f $(EXEC) *.elf *.gdb *.o
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

常用的vim命令 命令 常用的
光标命令:(可视模式下) 光标命令:(可视模式下) :(可视模式下 k、j、h、l—上下左右光标移动命令。 上下左右光标移动命令。 、 、 、 上下左右光标移动命令 nG—调转命令,n为行数,该命令使光标立即跳到指定的行数。 调转命令, 为行数 该命令使光标立即跳到指定的行数。 为行数, 调转命令 Ctrl+G—光标所在位置的行数和列数。 光标所在位置的行数和列数。 光标所在位置的行数和列数 编辑命令: 可视模式下) 编辑命令: (可视模式下) i—从可视命令模式进入文本编辑模式。 从可视命令模式进入文本编辑模式。 从可视命令模式进入文本编辑模式 esc键—放回到可视命令模式。 放回到可视命令模式。 键 放回到可视命令模式 查找命令: 可视模式下) 查找命令: (可视模式下) /string 、? 、?String—从光标所在的行向前向后查找相应的字符 从光标所在的行向前向后查找相应的字符 串。 拷贝复制命令: 可视模式下) 拷贝复制命令: (可视模式下) yy—拷贝一行到剪切板 拷贝一行到剪切板 p—粘贴剪切板的内容 粘贴剪切板的内容 在冒号命令方式下: ,表示从当前光标处开始复制n行内容到 在冒号命令方式下:yn,表示从当前光标处开始复制 行内容到 剪切板。将光标移到相应的位置, 即可粘贴剪切板的内容。 剪切板。将光标移到相应的位置,按p即可粘贴剪切板的(可视模式下) 编辑命令(可视模式下)
dd—删除整行命令 删除整行命令 u—恢复前一次的删除动作 恢复前一次的删除动作
冒号命令方式命令 :q—退出命令 退出命令 :w—存档 存档 :wq—存档退出 存档退出 放弃任何改动, :q!--放弃任何改动,强行退出 ! 放弃任何改动
GUNMakeFile、Makefile和makefile 、 和
实例分析
#The makefile is for test. objects = main.o subr.o exec = prog all:$(objects) gcc –o $(exec) $(objects) main.o:test1.c gcc –c main.c subr.o:test2.c gcc –c subr.c clean: rm –r $(exec) $(objects) 注意: 注意:
蓝色的每行,必须从每行的起始处开始,不能有空格。 蓝色的每行,必须从每行的起始处开始,不能有空格。 红色标注的每行,起始处不是空格,是“Tab”键。 红色标注的每行,起始处不是空格, 键 注释均以’ 开始 注释均以’#’开始
简化makefile 简化
利用makefile的隐含规则简化 的隐含规则简化 利用 ######## objects = main.o subr.o exec = prog all:$(objects) gcc –o $(exec) $(objects) clean: rm –r $(exec) $(objects)
Vi编辑器和 编辑器和GCC 编辑器和 开发工具
vi(m)编辑器 编辑器
vi是Linux/UNIX世界里极为普遍的全屏幕 是 / 世界里极为普遍的全屏幕 文本编辑器,几乎任何一台Linux/UNIX机 文本编辑器,几乎任何一台 / 机 器都会提供这个软件。 器都会提供这个软件。这种编辑器的一大好 处是所有的命令按键都在手指范围内,手不 处是所有的命令按键都在手指范围内, 必离开主键盘就可输入所有命令。 必离开主键盘就可输入所有命令。 $vi filename 新建文档或开启旧文档。 新建文档或开启旧文档。 vi有3种状态,即可视命令模式、冒号命令模 种状态, 有 种状态 即可视命令模式、 式及文本编辑模式。 式及文本编辑模式。
Makefile
Makefile带来的好处就是--“自动化编 带来的好处就是--“ 带来的好处就是-- 一旦写好,就只需一个make命令就可 译”,一旦写好,就只需一个 命令就可 以实现整个工程完全自动化编译, 以实现整个工程完全自动化编译,极大的提 高了软件开发的效率。 高了软件开发的效率。 有效文件名: 有效文件名:
gcc 编译过程
预处理 这一步需要分析各种命令, 这一步需要分析各种命令,如:#define、 、 #include、#ifdef等。gcc将调用 将调用cpp程序来进 、 等 将调用 程序来进 行预处理。 行预处理。 编译 这一步将根据输入文件产生汇编语言, 这一步将根据输入文件产生汇编语言,由于通常 是立即调用汇编程序, 是立即调用汇编程序,所以其输出一般不保存在 文件中。 文件中。 汇编 这一步将汇编语言用作输入,产生具有.o扩展名 这一步将汇编语言用作输入,产生具有 扩展名 的目标文件。 的目标文件。 连接 在这一步,各目标文件.o被放在可执行文件的适 在这一步,各目标文件 被放在可执行文件的适 当位置上。 调用连接程序ld来完成最终的任 当位置上。gcc调用连接程序 来完成最终的任 调用连接程序 务。
gcc规则 规则
gcc通过后缀来区别输入文件的类别,gcc所 通过后缀来区别输入文件的类别, 通过后缀来区别输入文件的类别 所 遵循的部分约定规则如下: 遵循的部分约定规则如下:
.c为后缀的文件,C语言源代码文件; 为后缀的文件, 语言源代码文件 语言源代码文件; 为后缀的文件 .a为后缀的文件,是由目标文件构成的档案库文 为后缀的文件, 为后缀的文件 件; .cc或.cxx 为后缀的文件,是C++源代码文件; 为后缀的文件, 源代码文件; 或 源代码文件 .h为后缀的文件,是程序所包含的头文件; 为后缀的文件, 为后缀的文件 是程序所包含的头文件; .o为后缀的文件,是编译后的目标文件; 为后缀的文件, 为后缀的文件 是编译后的目标文件; .s为后缀的文件,是汇编语言源代码文件; 为后缀的文件, 为后缀的文件 是汇编语言源代码文件;
gcc编译器 编译器
Linux系统下的 系统下的Gcc(GNU C Compiler)是GNU 系统下的 ( ) 推出的功能强大、性能优越的多平台编译器, 推出的功能强大、性能优越的多平台编译器,是 GNU的代表作品之一。gcc是可以在多种硬体平 的代表作品之一。 的代表作品之一 是可以在多种硬体平 台上编译出可执行程序的超级编译器, 台上编译出可执行程序的超级编译器,其执行效 率与一般的编译器相比平均效率要高20%~30%。 率与一般的编译器相比平均效率要高 。 Gcc编译器能将 、C++语言源程序、汇编程序和 编译器能将C、 语言源程序、 编译器能将 语言源程序 目标程序编译、连接成可执行文件, 目标程序编译、连接成可执行文件,如果没有给 出可执行文件的名字, 将生成一个名为a.out 出可执行文件的名字,gcc将生成一个名为 将生成一个名为 的文件。在Linux系统中,可执行文件没有统一的 的文件。 系统中, 系统中 后缀, 后缀,系统从文件的属性来区分可执行文件和不 可执行文件。 可执行文件。
vi的编辑状态 的编辑状态
可视命令模式:一般当进入 时 可视命令模式:一般当进入vi时,会首先进 入可视命令方式,这是Vi的启动默认模式 的启动默认模式。 入可视命令方式,这是 的启动默认模式。 冒号命令方式:所有命令都要以“ 开始, 冒号命令方式:所有命令都要以“:”开始, 所输入的字符系统均作命令来处理, 所输入的字符系统均作命令来处理, 如输入 “:q”代表退出,“:w”表示存盘。 代表退出, 表示存盘。 代表退出 表示存盘 文本编辑模式:在可视命令模式下,输入” 文本编辑模式:在可视命令模式下,输入”i” 即可进入编辑模式,进行编写、 即可进入编辑模式,进行编写、修改代码等 操作。 操作。
gcc 参数说明
-c 只编译并生成目标文件。 只编译并生成目标文件。 -o FILE 生成指定的输出文件 生成指定的输出文件FILE,没有指定 ,没有指定FILE, , 默认输出文件为a.out。 默认输出文件为 。 -O 优化生成代码。 优化生成代码。 -w 不生成任何警告信息。 不生成任何警告信息。 -Wall 生成所有警告信息。 生成所有警告信息。 -g 生成调试信息。GNU 调试器可利用该信息。 生成调试信息。 调试器可利用该信息。 -lLIBRARY 连接时搜索指定的函数库 连接时搜索指定的函数库LIBRARY。 。
gdb
Linux 包含了一个叫 包含了一个叫gdb 的GNU 调试程序 调试程序. gdb 是一个用来调试 和C++ 程序的强力调 是一个用来调试C 试器. 试器 它使你能在程序运行时观察程序的内部 结构和内存的使用情况. 功能非常强大: 结构和内存的使用情况 Gdb 功能非常强大
可监视程序中变量的值。 可监视程序中变量的值。 可设置断点以使程序在指定的代码行上停止执行。 可设置断点以使程序在指定的代码行上停止执行。 支持单步执行等
简化makefile(2) 简化
利用内部变量进行简化 objects = main.o subr.o exec = prog all:$(objects) gcc –o $@ $^ clean: rm –r $(exec) $(objects)
$@ 扩展成当前规则的目的文件名, 扩展成当前规则的目的文件名, $< 扩展成依靠列表中的第 一个依靠文件 $^ 扩展成整个依靠的列表
gcc用法
gcc最基本的用法是∶ 最基本的用法是∶ 最基本的用法是 gcc [options] [filenames] 其中options就是编译器所需要的参数,filenames 就是编译器所需要的参数, 其中 就是编译器所需要的参数 给出相关的文件名称。 给出相关的文件名称。 举例: 举例: gcc –c main.c gcc –c subr.c gcc –I/usr/include –o prog main.o subr.o
gdb 的常用命令
list 显示源代码段。 显示源代码段。 run 运行程序。 运行程序。 break NUM 在指定的行上设置断点。 在指定的行上设置断点。 Watch express 参看变量或表达式的值。 参看变量或表达式的值。 continue 继续执行正在调试的程序。该命令用在程 继续执行正在调试的程序。 序由于处理信号或断点而导致停止运行时。 序由于处理信号或断点而导致停止运行时。 next 单步执行,但不进入函数。 单步执行,但不进入函数。 Step 单步执行,进入函数。 单步执行,进入函数。 info break 显示当前断点清单,包括到达断点处的 显示当前断点清单, 次数等。 次数等。 kill 终止正被调试的程序。 终止正被调试的程序。
相关文档
最新文档