Linu系统编程实验gccgdb的使用以及Makefile文件的编写

合集下载

linux makefile编写规则

linux makefile编写规则

linux makefile编写规则(原创实用版)目录一、Makefile 简介二、Makefile 的规则1.目标文件2.依赖文件3.命令三、Makefile 中的变量1.通用变量2.局部变量四、Makefile 中的路径1.源文件路径2.目标文件路径3.库文件路径五、Makefile 编写实例六、总结正文一、Makefile 简介Makefile 是一个用于自动化构建和编译软件的脚本文件,通常在Linux 系统中使用。

它可以帮助开发者管理源代码,以及确定哪些文件需要编译,如何编译,以及编译后的文件如何链接。

通过编写 Makefile,开发者可以轻松地构建和维护复杂的软件项目。

Makefile 主要包括三类规则:目标文件、依赖文件和命令。

1.目标文件目标文件是 Makefile 中要生成的文件,可以是对象文件、库文件或执行文件。

在 Makefile 中,目标文件通常以“target”关键字开头,后面跟要生成的文件名。

例如:“target = main.o”。

2.依赖文件依赖文件是 Makefile 中要生成目标文件所需要的其他文件,通常是源代码文件。

在 Makefile 中,依赖文件通常以“prerequisites”关键字开头,后面跟要依赖的文件名。

例如:“prerequisites = a.c b.c”。

3.命令命令是用来生成目标文件的命令,通常是编译器或链接器。

在Makefile 中,命令通常以“command”关键字开头,后面跟要执行的命令。

例如:“command = gcc -o main.o a.c b.c”。

三、Makefile 中的变量Makefile 中的变量可以用于存储常量值,以便在 Makefile 中多次使用。

变量分为通用变量和局部变量。

1.通用变量通用变量是在整个 Makefile 中都可以使用的变量。

通用变量通常在Makefile 的开头定义,使用“define”关键字。

实验二 GCC 及GDB的使用

实验二  GCC 及GDB的使用

实验二GCC 及GDB的使用一、实验目的和要求a)掌握VI编译环境。

b)掌握GCC编译命令。

c)掌握多个文件共同编译方法。

d)掌握GDB调试命令。

二、实验内容和原理(可参照课件第五章)a)在VI编辑器里编写简单的“hello,world,I am 13050141XX XXX”,利用GCC编译为可执行文件,执行,观察运行结果。

b)在VI编辑器里编写多个文件(至少两个,其中一个为主程序,一个为需要调用的子程序),为其书写头文件,共同编译为可执行文件,执行,观察运行结果。

学习书写MAKEFILE文件,编译,执行,观察结果。

c)编写循环结构的程序,利用GCC 编译(加参数-g)为可执行文件,利用GDB调试,学习GDB调试命令。

三、实验环境a)硬件:PC机b)软件:LINUX操作系统、虚拟机四、实验步骤vi hello.c i:C语言编程Esc :wq gcc hello.c gdb file a.out run a实验三交叉编译环境配置一、实验目的和要求熟悉 Linux 开发环境,学会基于S3C2410 的Linux 开发环境的配置和使用。

使用Linux 的armv4l-unknown-linux-gcc 编译,使用基于NFS 方式的下载调试,了解嵌入式开发的基本过程。

二、实验内容a)配置网络,包括配置IP 地址、NFS 服务、防火墙。

b)安装交叉编译器c)配置超级终端,下载文件到目标机上。

三、实验设备及工具(包括软件调试工具)硬件:UP-TECH S2410/P270 DVP 嵌入式实验平台、PC 机Pentium 500 以上, 硬盘10G 以上。

软件:REDHAT LINUX 9.0+超级终端+ARM-LINUX 开发环境四、实验步骤(所有的内容截图)1、虚拟机设置为桥接模式。

2、配置IP地址,设置为192.168.0.xxx参照实验指导书图1.4.1-1.4.3. 自己截图,说明3、关闭防火墙,参照实验指导书图1.4.4自己截图,说明4、打开桌面超级终端(HyperTerminal),配置COM1,115200波特率,8N1,实验箱插上电源线,网线与主机相连,串口线与主机串口1相连,开机,看bootloader程序VIVI是否自动加载,回车后进入命令提示符。

linux下c程序的编写实验报告

linux下c程序的编写实验报告

linux下c程序的编写实验报告实验主题:在Linux下编写C程序的实验报告一、引言(150-200字)Linux是一种广泛应用的操作系统,具有高度开放性和灵活性,也是许多程序员首选的开发环境。

在Linux中,通过编写C程序可以实现各种应用和功能。

本实验旨在通过一步一步的说明和回答,介绍在Linux下编写C 程序的基本步骤和方法。

二、实验步骤(400-500字)1. 设置编程环境在Linux中编写C程序,首先需要安装相关的开发工具和编译器。

常用的编译器有gcc和clang,可以通过包管理器进行安装。

同时,也需要一个文本编辑器来编写C代码,比如vim或者emacs。

2. 编写Hello World程序Hello World程序是C语言学习的经典入门程序,它可以在屏幕上输出"Hello World"。

在文本编辑器中新建一个文件,命名为hello.c,然后在文件中输入以下代码:#include <stdio.h>int main() {printf("Hello World\n");return 0;}保存文件后,使用gcc编译器将该文件编译成可执行文件。

在终端中执行以下命令:gcc -o hello hello.c此时会生成一个名为hello的可执行文件。

通过执行该文件,可以在终端中看到输出结果"Hello World"。

3. 命令行参数和用户输入C程序可以接受命令行参数和用户输入,从而实现更复杂的功能。

在上一步编写的程序的基础上,我们尝试接收用户输入的姓名,并输出相应的问候语。

在hello.c文件中添加以下代码段:#include <stdio.h>int main(int argc, char *argv[]) {char name[100];printf("Please enter your name: ");scanf("s", name);printf("Hello, s!\n", name);return 0;}重新编译程序并执行,可以看到在终端中会提示用户输入姓名,并输出相应的问候语。

实验3 使用gcc编译器

实验3 使用gcc编译器

实验三使用gcc编译器一.实验目的1、巩固vi的使用。

2、练习用Linux下gcc编译器运行c或c++程序。

3、练习使用make工具和调试工具gdb。

4、练习编写简单的c或c++程序。

二.实验内容用vi建立C++/C程序后,学习使用gcc编译器编译执行(命令格式详见实验指导书P100),查看结果。

1. helloworld程序。

2. 判断一个年份是平年还是闰年。

3. 打印九九乘法表。

三.实验步骤1、登陆Linux系统,操作方法请参考实验二。

2、使用vi编写helloworld.cpp程序(安装了vim的同学,可以输入vimhelloworld.cpp),保存。

程序代码如下:using namespace std;#include<iostream>int main(){cout<<”hello,world!\n”;return 0;}或编写helloworld.c程序,代码如下:#include<stdio.h>int main(){printf(“hello,world!\n”);return 0;}然后,利用g++ helloworld.cpp或gcc helloworld.c指令编译执行。

(如果没有任何输出提示,恭喜你,编译执行成功。

否则,会提示出错信息,请检查语法并修改。

)最后,在命令行输入 ./a.out 查看结果。

3、make工具在应用程序的开发过程中,若每次修改源文件都需要重新输入编译命令,这种做法很烦琐而且开发效率不高。

为了能快速组织源文件进行编译,linux中提供了make工具。

Make的运行过程前,必须编写Makefile文件。

它描述了软件包中文件之间的关系,提供更新每个文件的命令。

Make实验上是根据Makefile 来进行编译的。

以helloworld.c为例,编写makefile文件:helloworld:helloworld.ogcc –o helloworld helloworld.o(开头使用Tab键空格) helloworld.o:helloworld.cgcc –o helloworld.o –c helloworld.cclean:rm –f *.o hello然后,重新编译helloworld.c,命令:gcc –g helloworld.c –o helloworld 第三步,输入命令:make4、调试工具---gdb运行gdb调试程序通常的命令格式为:gdb 程序的文件名例如: gdb helloworld启动gdb调试工具后,进入gdb的调试界面。

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文件中的规则和依赖关系来编译源代码文件并生成目标文件和可执行文件。

gccmakefile文件的编写精品PPT课件

gccmakefile文件的编写精品PPT课件
❖ 拷贝复制命令: (可视模式下) yy—拷贝一行到剪切板 p—粘贴剪切板的内容 在冒号命令方式下:yn,表示从当前光标处开始复制n行内容到 剪切板。将光标移到相应的位置,按p即可粘贴剪切板的内容。
常用的vim命令
❖ 编辑命令(可视模式下)
dd—删除整行命令 u—恢复前一次的删除动作
❖ 冒号命令方式命令 :q—退出命令 :w—存档 :wq—存档退出 :q!--放弃任何改动,强行退出
实例分析
❖ #The make 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)
vi的编辑状态
❖ 可视命令模式:一般当进入vi时,会首先进 入可视命令方式,这是Vi的启动默认模式。
❖ 冒号命令方式:所有命令都要以“:”开始, 所输入的字符系统均作命令来处理, 如输入 “:q”代表退出,“:w”表示存盘。
❖ 文本编辑模式:在可视命令模式下,输入”i” 即可进入编辑模式,进行编写、修改代码等 操作。
❖ $@ 扩展成当前规则的目的文件名, ❖ $< 扩展成依靠列表中的第 一个依靠文件 ❖ $^ 扩展成整个依靠的列表
gdb
❖ Linux 包含了一个叫gdb 的GNU 调试程序. gdb 是一个用来调试C 和C++ 程序的强力调 试器. 它使你能在程序运行时观察程序的内部 结构和内存的使用情况. Gdb 功能非常强大:
gcc规则
❖ gcc通过后缀来区别输入文件的类别,gcc所 遵循的部分约定规则如下:

实验一 gcc和gdb的使用

实验一  gcc和gdb的使用
实验内容将下面的程序输入到一个文件名字为testc的磁盘文件中利用调试程序找出其中的错误修改后存盘其中的错误修改后存盘
实验一 gcc和gdb的使用
实验目的 1.掌握Linux操作系统下最常用的c 语言编译器gcc的使用 2.掌握Linux操作系统下最常用的 代码调试器gdb的使用; 3.掌握调试代码的基本方法,如 观察变量、设置断点等。
4.gdb简介 Linux包含了一个叫gdb的GNU调试程序。gdb是一个 用来调试c和c十十程序的强力调试器。它使用户能在 程序运行时观察程序的内部结构和内存的使用情况。 以下是gdb所提供的一些功能: 能监视程序中变量的值; · 能设置断点以使程序在指定的代码行上停止执行; · 能一行行地执行代码。
在命令行上键入gdb并按回车键就可以运行gdb 了, 如果一切正常的话,gdb将被启动,并且文件名字为 test.c的磁盘文件中,利用调试程序找出 其中的错误,修改后存盘。该程序的功 能是显示一个简单的问候语,然后用反 序方式将它列出。
实验预备内容 1.阅读在线帮助命令man gcc的 内容,了解gcc的基本使用 2.阅读在线帮助命令man gdb的 内容,了解gdb的基本使用
gcc简介 Unix上使用的c语言编译器gcc,在Linux上的派生就是 gcc。在使用vi编写完源程序之后,返回到shell界面,使用 gcc对源程序进行编泽的命令为: gcc 源程序 其中,“源程序”即为编写的以.c为扩展名的c语言源代 码文件。
3、
如果源代码没有语法错误,使用以上命令编译,会在 当前目录下生成一个名为a.out的可执行文件。如果源代码 有语法错误,则不会生成任何文件,gcc编译器会在shell 中提示错误的地点和类型。
也可以使用以下方法编译源代码文件.生成自 命名的可执行文件; gcc源文件-o自命名的文件名 执行当前目录下编译生成的可执行文件,使用 以下格式: ./可执行文件名 当使用gcc编译程序源代码的时候,可能会因 为源代码存在语法错误,编译无法进行下。这 时候,就可以使用调试器gdb来对程序进行调 试。

makefile gcc编译

makefile gcc编译

makefile gcc编译
Makefile 是一个用来组织代码编译的工具,而 GCC 是一个常用的 C 和 C++ 编译器。

在 Makefile 中使用 GCC 进行编译可以通过以下步骤完成:
1. 创建一个名为 "Makefile" 的文本文件,并确保它位于你的项目根目录下。

2. 在 Makefile 中定义你的编译规则。

例如,假设你有一个名为 "main.c" 的源文件需要编译成可执行文件 "app",你可以这样编写 Makefile:
make.
app: main.c.
gcc -o app main.c.
在这个例子中,我们定义了一个名为 "app" 的目标,它依赖于"main.c" 这个源文件。

当你运行 "make" 命令时,Make 工具会根
据这个规则来执行编译。

3. 打开终端,进入到包含 Makefile 的项目目录下。

4. 运行命令 "make"。

Make 工具会读取 Makefile 文件,并执行其中定义的编译规则。

在这个例子中,它会使用 GCC 编译器来编译 "main.c" 并生成可执行文件 "app"。

需要注意的是,Makefile 可以包含更复杂的规则和变量定义,以及支持多个源文件的编译。

你可以根据你的项目需求来进一步扩展和定制 Makefile 文件。

总之,通过合理编写 Makefile 并结合使用 GCC 编译器,你可以高效地组织和管理你的代码编译过程。

Linux系统Makefile编写与GCC编译实验报告

Linux系统Makefile编写与GCC编译实验报告

实验报告实验题目Linux系统Makefile编写与GCC编译实验姓名:学号:课程名称:所在学院:专业班级:任课教师:四、实验过程、步骤及内容(一)GCC编译1、准备环境2、建立相关目录$ cd workdir/linux/application$ mkdir 6-gcc3、将代码从共享目录拷入虚拟机L inux 操作系统下;(可使用【crtl+空格】切换输入法)$ cp /mnt/hgfs/share/实验代码/03.\ Linux 系统GCC 编译器的使用实验/实验代码/* 6-gcc/ -a$ cd 6-gcc/4、编译代码$ arm-none-linux-gnueabi-gcc helloworld.c -o hello$ mkdir /source/rootfs/app$ cp hello /source/rootfs/app/5、执行代码通过tftp 下载内核,nfs 挂载文件系统,启动开发板。

在开发板串口终端执行应用程序。

# cd /app# ./hello6、相关代码:#include <stdio.h>int main (int argc,char **argv){printf("hello,world!\n");return 0;}(二)Makefile编程1、环境准备2、建立相关目录$ cd workdir/linux/application$ mkdir 7-Makefile3、将代码从共享目录拷入虚拟机L inux 操作系统下;(可使用【crtl+空格】切换输入法)$ cp /mnt/hgfs/share/实验代码/05.\ Linux 系统Makefile 编写实验/实验代码/5.2/makefileTest/* 7-Makefile/ -a$ cd 7-Makefile/4、执行代码进入makefileTest 目录,执行make。

$ make CLEAN$ make会出现如下信息:5、在开发板上执行通过tftp下载内核,nfs挂载文件系统,启动开发板6、相关代码:CC = arm-none-linux-gnueabi-gcc SUBDIRS = f1 \f2 \main \objOBJS = f1.o f2.o main.oBIN = myappOBJS_DIR = objBIN_DIR = binexport CC OBJS BIN OBJS_DIR BIN_DIRall : CHECK_DIR $(SUBDIRS)cp bin/myapp /source/rootfs/app CHECK_DIR :mkdir -p $(BIN_DIR) $(SUBDIRS) : ECHOmake -C $@ECHO:@echo $(SUBDIRS)@echo begin compileCLEAN :@$(RM) $(OBJS_DIR)/*.o@rm -rf $(BIN_DIR)五、实验数据(现象)处理分析实验现象如下:(一)GCC编译(二)Makefile编程。

《Linux网络操作系统》课件——项目九--使用gcc和make-调试程序

《Linux网络操作系统》课件——项目九--使用gcc和make-调试程序
上面的thanks_2()就是调用子程序![root@RHEL7-2 ~]# vim thanks_2.c#include <stdio.h>void thanks_2(void){ printf("Thank you!\n");
16
2.进行程序的编译与链接(Link)
(1)开始将源码编译成为可执行的 binary file。[root@RHEL7-2 ~]# gcc -c thanks.c thanks_2.c[root@RHEL7-2 ~]# ll thanks*-rw-r--r--. 1 root root 76 Jul 15 21:27 thanks_2.c-rw-r--r--. 1 root root 1504 Jul 15 21:27 thanks_2.o <==编译生成的目标文件!-rw-r--r--. 1 root root 91 Jul 15 21:25 thanks.c-rw-r--r--. 1 root root 1560 Jul 15 21:27 thanks.o <==编译生成的目标文件![root@RHEL7-2 ~]# gcc -o thanks thanks.o thanks_2.o[root@RHEL7-2 ~]# ll thanks*-rwxr-xr-x. 1 root root 8584 Jul 15 21:28 thanks <==最终结果会生成可执行文件(2)执行可执行文件。[root@RHEL7-2 ~]# ./thanksHello WorldThank you!
7
2.安装GCC
(1)检查是否安装GCC。[root@RHEL7-2 ~]# rpm -qa|grep gcccompat-libgcc-296-2.96-138libgcc-4.1.2-46.el5gcc-4.1.2-46.el5gcc-c++-4.1.2-46.el5上述结果表示已经安装了GCC。(2)如果系统还没有安装GCC软件包,我们可以使用yum命令安装所需软件包。① 挂载ISO安装镜像://挂载光盘到 /iso下,前面项目3已建立/iso文件夹,并且yum源已经配置好 [root@RHEL7-2 ~]# mount /dev/cdrom /iso② 制作用于安装的yum源文件(后面不再赘述):

LINUX C编程实验

LINUX  C编程实验

编写makefile 编写makefile
模块化程序的一般组成部分。 利用makefile管理编译工程文件的方法。 利用makefile管理编译工程文件的方法。 makefile中变量,自动推导规则,伪目标,多目 makefile中变量,自动推导规则,伪目标,多目 标等的应用。
实验三
文件管理
文件管理和进程管理
文件管理基本系统调用函数的应用。 Open,read,write,lseek,unlink,dup,dup2…
进程管理
进程管理基本系统调用函数的应用。 fork,wait,getpid,getppid,exit,号通信 利用管道通信 利用套接字通信
gcc编译器 gcc编译器
gcc编译C程序的一般方法。gcc编译器参数的 gcc编译C程序的一般方法。gcc编译器参数的 应用。
实验二
gdb和 gdb和makefile
gdb调试程序 gdb调试程序
gdb中常用的调试命令。利用gdb调试程序的方法。 gdb中常用的调试命令。利用gdb调试程序的方法。
LINUX C编程 C编程
教师:中国地质大学 朱静
实验一
LINUX 基础
LINUX命令应用 LINUX命令应用
熟悉linux常用命令的使用,了解linux目录结构,熟悉 熟悉linux常用命令的使用,了解linux目录结构,熟悉 linux环境下应用程序的安装,升级,文件的压缩与解 linux环境下应用程序的安装,升级,文件的压缩与解 压缩。
vi操作 vi操作
熟悉vi基本操作,利用vi建立编辑文件。 熟悉vi基本操作,利用vi建立编辑文件。
Shell编程 Shell编程
熟悉shell脚本的建立,执行。Shell脚本中变量,函 熟悉shell脚本的建立,执行。Shell脚本中变量,函 数,数组,条件测试的应用。Shell中的流程控制。 数,数组,条件测试的应用。Shell中的流程控制。

linux开发工具的使用gcc实验总结简短

linux开发工具的使用gcc实验总结简短

linux开发工具的使用gcc实验总结简短在Linux开发中,GCC是一个广泛应用的编译器套件,为程序员提供了丰富的工具和功能,方便进行开发和调试。

本文将为大家总结一下使用GCC进行实验的经验与技巧。

一、安装GCC在开始使用GCC之前,首先需要安装GCC编译器。

在大多数Linux发行版中,GCC已经预安装,可以直接使用。

如果没有安装,可以通过包管理器进行安装,例如在Ubuntu上可以使用以下命令进行安装:```sudo apt-get install gcc```二、编写和编译源代码1. 创建源代码文件使用任意文本编辑器,创建一个以.c为扩展名的源代码文件,例如hello.c。

2. 编写源代码在源代码文件中,可以使用C语言来编写程序。

下面是一个简单的示例代码:```c#include <stdio.h>int main() {printf("Hello, World!\n");return 0;}```3. 编译源代码打开终端,进入源代码所在的目录,使用以下命令进行编译:```gcc hello.c -o hello```其中,`hello.c`是源代码文件的名称,`hello`是生成的可执行文件的名称。

通过`-o`选项指定输出文件名。

三、运行和调试程序1. 运行程序编译成功后,可以直接运行生成的可执行文件。

在终端输入以下命令运行程序:```./hello```程序将会输出`Hello, World!`。

2. 调试程序GCC也提供了强大的调试功能,方便程序员进行调试和排错。

可以通过使用`-g`选项来编译生成带有调试信息的可执行文件:```gcc -g hello.c -o hello-debug```然后,可以使用`gdb`命令来启动调试器,并加载可执行文件进行调试:```gdb hello-debug```调试器提供了许多命令和功能,可以帮助你定位和修复代码中的问题。

Linux下的C语言编程实验报告

Linux下的C语言编程实验报告
zhangshan
[root@localhost home]# echo $name1
zhang san
[root@localhost home]# echo $name2
zhang san
[root@localhost home]#
7.env系统变量
管理模式1
显示passwd中的第一列|命令
[root@localhost home]# cat /etc/passwd |cut -d ":" -f1
(.text+0x18): undefined reference to `main'
collect2: ld返回1
[root@localhost home]# . /a.out
bash: /a.out:没有那个文件或目录
[root@localhost home]# gcc test.c -o test.i
调用Linux的shell来执行<command string>,环境变量SHELL中定义的Linux的shell将会用来执行<command string>。如果SHELL没有定义,那就使用Linux的标准shell:/bin/sh(在Windows中使用或cmd.exe)。
Gcc的警告提示功能
gcc包含完整的出错检查和警告提示功能,它们可以帮助Linux程序员尽快找到错误代码,从而写出更加专业和优美的代码。先来读读例3-2所示的程序,这段代码写得很糟糕,仔细检查一下不难挑出如下毛病:
main函数的返回值被声明为void,但实际上应该是int;
使用了GNU语法扩展,即使用long long来声明64位整数,仍不符合ANSI/ISO C语言标准;

linux系统中make的用法

linux系统中make的用法

linux系统中make的用法make是一个常用的Linux命令,用于自动化编译程序。

当有多个源文件需要编译成可执行文件时,手动一个个编译比较麻烦。

这时候,我们就可以使用make命令实现自动化编译。

make命令的基本用法为:在Makefile文件中定义编译规则和依赖关系,然后运行make命令即可自动编译程序。

Makefile是一个文本文件,可以使用vi、nano等编辑器创建和编辑。

make命令的常用参数如下:* -f 指定Makefile文件,默认为当前目录下的Makefile或makefile文件。

* -n 或 --just-print 只打印命令,而不实际执行。

* -j 指定同时执行的任务数,加快编译速度。

* clean 清除中间文件和可执行文件等生成的文件。

Makefile文件中的基本语法为:```target: prerequisitescommand```其中,target为编译目标,prerequisites为编译目标所依赖的文件,command为执行编译的命令。

例如:```hello: hello.cgcc -o hello hello.c```这个Makefile文件中定义了一个名为“hello”的编译目标,它依赖于名为“hello.c”的源文件,执行命令为“gcc -o hellohello.c”,即将hello.c编译成可执行文件hello。

使用make命令进行编译时,可以直接运行“make”(默认编译第一个目标),也可以指定要编译的目标,例如“make hello”。

当定义的目标有多个依赖时,可以使用“$^”表示所有依赖文件,“$@”表示目标文件。

例如:```main.exe: main.c module1.o module2.ogcc -o $@ $^```这个Makefile文件中定义了一个名为“main.exe”的编译目标,它依赖于名为“main.c”、“module1.o”、“module2.o”的文件,执行命令为“gcc -o $@ $^”,即将这三个文件编译成可执行文件main.exe。

Linux程序设计基础—C环境(gcc gdb makefile)

Linux程序设计基础—C环境(gcc gdb makefile)
© 2006 博创科技
博创科技 嵌入互动
Linux程序需要首先转化为低级机器语言即所谓的二进制代码 以后,才能被操作系统执行。 例如编程时,先用普通的编程语言生成一系列指令,这些 指令可被翻译为适当的可执行应用程序的二进制代码。这 个翻译过程可由解释器一步步来完成,或者也可以立即由 编译器明确地完成。 shell编程语言如BASH、TCSH、GAWK、Perl、Tcl和Tk都利 用自己的解释器。用这些语言编制的程序尽管是应用程序文 件,但可以直接运行。编译器则不同,它将生成一个独立的 二进制代码文件然后才可以运行。
© 2006 博创科技
博创科技 嵌入互动
GNU风格 (2/2)
当一个if中嵌套了另一个if-else时,应用花括号把if-else括起来。 要在同一个声明中同时说明结构标识和变量或者结构标识和类型定义 (typedef)。先定义变量,再使用。 尽量避免在if的条件中进行赋值。 请在名字中使用下划线以分割单词,尽量使用小写;把大写字母留给宏和 枚举常量,以及根据统一惯例使用的前缀。例如,应该使用类似 ignore_space_change_flag的名字;不要使用类似iCantReadThis的名字。 用于表明一个命令行选项是否给出的变量应该在选项含义的说明之后,而 不是选项字符之后被命名。
博创科技 嵌入互动
命令模式
4、复制和移动 yy 复制当前行到内存缓冲区 nyy 复制 n 行内容到内存缓冲区 y与光标移动的组合 p 将缓冲区的内容粘贴到光标的后面 P 将缓冲区的内容粘贴到光标的前面 另:在末行模式下实现移动 :n1,n2 m n3 : 把 n1到n2 行内容搬到第 n3 行后
© 2006 博创科技
© 2006 博创科技
博创科技 嵌入互动
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

L i n u系统编程实验
g c c g d b的使用以及
M a k e f i l e文件的编写 The latest revision on November 22, 2020
实验二:gcc、gdb、Makefile的使用
实验目的:
(一)学会使用gcc编译器
(二)学会gdb调试器的使用
(三)学会编写Makefile
实验要求:
(一)编写一应用程序,使用gcc进行编译,并分别使用-o,-g,-static,-O2等选项
(二)编写一应用程序,使用gdb调试,调试中使用到该小节所介绍的所有命令
(三)实现一应用程序,该程序有两个c文件构成,使用makefile来完成对该程序的编译
实验器材:
软件:安装了Linux的vmware虚拟机
硬件:PC机一台
实验步骤:
(一)gcc编译器
1、先用vi编辑文件,内容如下:
2、gcc指令的一般格式为:gcc [选项] 要编译的文件 [选项] [目标文件]
例:使用gcc编译命令,编译生成可执行文件hello,并运行hello
上面的命令一步由.c文件生成了可执行文件,将gcc的四个编译流程:预处理、编译、汇编、连接一步完成,下面将介绍四个流程分别做了什么工作3、-E选项的作用:只进行预处理,不做其他处理。

例:只对文件进行预处理,生成文件,并查看
通过查看可以看到头文件包含部分代码#include <>经过预处理阶段之后,编译器已将的内容贴了进来。

4、-S选项的使用
-S选项的作用:只是编译不汇编,生成汇编代码
例:将文件只进行编译而不进行汇编,生成汇编代码
5、-c选项的使用
-c选项的作用:只是编译不连接,生成目标文件.o
例:将汇编代码只编译不链接成文件
6、将编译好的链接库,生成可执行文件hello
7、-static选项的使用
-static选项的作用:链接静态库
例:比较连接动态库生成的可执行文件hello和链接静态库生成的可执行文件hello1的大小
可以看到静态链接库的可执行文件hello1比动态链接库的可执行文件hello要大的多,他们的执行效果是一样的
8、-g选项的使用
-g选项的作用:在可执行程序中包含标准调试信息
例:将编译成包含标准调试信息的可执行文件hello2
带有标准调试信息的可执行文件可以使用gdb调试器进行调试,以便找出逻辑错误
9、-O2选项的使用
-O2选项的作用:完成程序的优化工作
例:将用O2优化选项编译成可执行文件hello3,和正常编译产生的可执行文件hello进行比较
(二)gdb调试器
#include <>
int main(void)
{
int sum(int sum);
int i,result=0;
sum(100);
for(i=1;i<=100;i++){
result+=i;
}
printf("The sum in main function is %d\n",result);
return 0;
}
int sum(int num)
{
int i,n=0;
for(i=0;i<=num;i++){
n+=i;
}
printf("The sum in sum function is %d\n",n);
}
3、启动gdb进行调试
可以看到gdb启动界面中显示了gdb的版本、自由软件等信息,然后进入了有”gdb”开头的命令行界面
4、l(list)命令
l命令用于查看文件
可以看到每行代码面前都有对应的行号,这样方便我们设置断点。

5、b(breakpoint)命令
b用于设置断点,断点调试时调试程序的一个非常重要的手段,设置方法:在”b”命令之后加上对应的行号,如下图
在gdb中可以设置多个断点。

代码运行时会到断点对应的行之前暂停,上图中,代码就会运行到第7行之前暂停(并没有运行第7行)。

6、info命令
info命令用于查看断点情况,设置好断点后可以用它来查看
7、r(run)命令
r命令用于运行代码,默认是从首行开始运行,也可以在r后面加上行号,从程序中指定行开始运行。

可以看到程序运行到断点处就停止了
8、p(print)命令
p命令用于查看变量的值,在调试的时候我们经常要查看某个变量当前的值与我们逻辑设定的值是否相同,输入p+变量名即可
可以看到result在第6行已被赋值为零,而i目前还没有被赋值所以是一个随机数,在主函数里看不到num的值,只有进入子函数才能看到
9、s(step)命令
s命令用于单步运行,另外n(next)命令也用于单步运行,他们的区别在于:如果有函数调用的时候,s会进入该函数而n不会进入该函数。

可以看到进入了sum子函数,这时候就能看到num的值为100。

10、n(next)命令
n命令用于单步运行,下面是n命令的使用:
和s命令的运行效果对比会发现,使用n命令后,程序显示函数sum的运行结果并向下执行,而使用s命令后则会进入到sum函数之中单步运行
11、finish命令
finish命令用于运行程序,直到当前函数结束。

例如我们进入了sum函数,使用finish命令的情况
当我们调试的时候如果觉得某个函数存在问题,进入函数调试之后发现问题不在这个函数,那么我们就可以使用finish命令运行程序,知道当前函数结束。

12、c命令用于恢复程序的运行,例如我们再一个程序中设置了两个断点,而觉得问题不会再这两个断点之间的代码上,那么我们局可以在查看完第一个断点的变量及堆栈情况后,使用c命令恢复程序的正常运行,代码就会停在dier 个断点处
13、q(quit)命令
q命令用于退出gdb调试器
(三)Makefile文件的编写
1、先用vi编辑一个简单的c程序,由两个文件组成
#include ""
int max_fun(int x,int y)
{
if(x>=y)
return x;
else
return y;
}
#include ""
int main(void)
{
int a,b;
printf("Please enter the number a and b\n");
scanf("%d%d",&a,&b);
int max=0;
max=max_fun(a,b);
printf("The max number is %d\n",max);
return 0;
}
文件内容
#include <>
extern int max_fun(int x,int y);
2、使用gcc编译命令直接编译出可执行文件main,并运行查看结果.
main:
gcc -o main
:
gcc -c -o
:
gcc -c -o
clean:
rm -f main *.o
5、用vi打开makefile进行改写,用变量进行替换,经变量替换后的
OBJS=
CC=gcc
CFLAGS=-c
main:$(OBJS)
$(CC) $(OBJS) -o main
:
$(CC) $(CFLAGS) -o
:
$(CC) $(CFLAGS) -o
clean:
rm -f main *.o
一样的
OBJS=
CC=gcc
CFLAGS=-c
main:$(OBJS)
$(CC) $(OBJS) -o $@
:
$(CC) $(CFLAGS) $< -o $@
:
$(CC) $(CFLAGS) $< -o $@
clean:
rm -f main *.o
上机报告要求:
1、总结选项-o,-E,-S,-c,-static,-g的功能作用。

-o指定目标文件名称
-E选项的作用:只进行预处理,不做其他处理。

-S选项的作用:只是编译不汇编,生成汇编代码
-c选项的作用:只是编译不连接,生成目标文件.o
-static选项的作用:链接静态库
-g选项的作用:在可执行程序中包含标准调试信息
2、启动gdb的方式有几种分别如何启动
1)gdb +调试程序名
2)gdb
file 调试程序名
3、总结gdb中step命令与next命令的区别finish命令与quit命令的区别
s命令用于单步运行,另外n(next)命令也用于单步运行,他们的区别在于:如果有函数调用的时候,s会进入该函数而n不会进入该函数。

finish命令用于运行程序,直到当前函数结束。

q命令用于退出gdb调试器
4、编写makefile文件的三大构成要素是什么分析第三个步骤的makefile,指出这三大要素分别对应的具体代码
目标 :依赖命令
main:
(Tab)gcc -o main
:
(Tab)gcc -c -o
:
(Tab)gcc -c -o
clean:
(Tab)rm -f main *.o。

相关文档
最新文档