linux编程基础2(gcc.gdb,makefile)

合集下载

第2章Linux编程环境

第2章Linux编程环境
第21页,共37页。
第2章Linux编程环境
工程中共有5个文件,在add目录中有add_int.c和add_float.c两个文件分别计算整形和浮点型的相加 ;在sub目录下有文件sub_int.c和sub_float.c,分别计算整形和浮点型的相减;顶层目录有文件main.c负责整个程序

工程中的代码分别存放在add/add_int.c、add/add_float.c、add/add.h、sub/sub_int.c 、sub/sub_float.c、sub/sub.h和main.c中。
set shiftwidth=2
#设置缩进为2个空格
set tabstop=2
#设置<TAB>键宽度为2个空格
set number
#显示行号
再次启动vim对缩进宽度,Tab键的宽度都进行了设定,并且自动显示行号。
第6页,共37页。
第2章Linux编程环境
在Linux下还有一些其他的编辑器,例如Gvim等(Gvim是vim的gnome版本)、codeblocks(严 格来说是一个IDE开发环境)。
下面是一个程序的源代码,代码的作用是在控制台输出“Hello World!”字符串。
/*hello.c*/ #include <stdio.h> int main(void) {
printf(“Hello World!\n”);
return 0;
}
第11页,共37页。
第2章Linux编程环境
目标文件是指经过编译器的编译生成的CPU可识别的二进制代码,因为其中的一些函数过程没有相关
vim的编辑命令有很多,本小节选取经常使用的几个命令进行介绍。介绍如何在vim下移动光标,进行删除字 符、复制、查找、转跳等操作。

gcc makefile文件的编写

gcc makefile文件的编写

常用的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 、 和

实验二 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 vscode makefile语法

linux vscode makefile语法

linux vscode makefile语法在Linux 系统中,如果您想使用VSCode 编写Makefile 相关的项目,可以参考以下步骤进行安装和配置:1. 首先,确保已经正确安装了Visual Studio Code。

如果尚未安装,可以参考[1] 中的教程进行安装。

2. 安装Makefile 插件。

打开VSCode,转到“扩展”选项卡(快捷键:Ctrl+Shift+X),搜索“Makefile”,找到名为“Makefile Support”的插件,点击“安装”。

3. 创建一个新的Makefile 项目。

在VSCode 中,创建一个新的文件夹,然后在该文件夹中打开终端(快捷键:Ctrl+`)。

4. 编写Makefile 语法。

在项目根目录下创建一个名为“Makefile”的文件,然后编写相应的Makefile 语法。

以下是一个简单的示例:```make# 设置变量MY_PROJECT_NAME = MyProjectMY_PROJECT_VERSION = 1.0# 设置目标all: build# 构建目标build:echo "Building $MY_PROJECT_NAME $MY_PROJECT_VERSION"# 在这里添加您的构建命令,例如:cmake、make等# 清理目标clean:echo "Cleaning $MY_PROJECT_NAME"# 在这里添加您的清理命令,例如:rm -rf build/# 默认执行构建目标default: build```5. 保存Makefile 文件并按F5 键运行项目。

VSCode 将会自动使用内置的终端执行Makefile 中的命令。

6. 如果需要使用GPU 加速构建,可以在Makefile 中添加相应的NVIDIA CUDA 或者AMD OpenCL 命令。

例如,如果您使用的是NVIDIA GPU,可以添加以下命令:```makebuild_gpu:echo "Building $MY_PROJECT_NAME $MY_PROJECT_VERSION using GPU"# 在这里添加您的GPU 构建命令,例如:nvcc、cuda编译器等```7. 按照项目需求修改Makefile 中的命令和目标。

makefile增量编译

makefile增量编译

2.直接展开式
这种风格的变量使用“:=”来定义变量。在使用“:=”定义变量时,变量值中对另外变量的引用或者函数的引用在定义时被展开(对变量进行替换)。
x := foo
y := $(x) bar
x := later
就等价于:
y := foo bar
x := later
需要CFLAGS := $(include_dirs) -O
$(<D)
$(<F)
分别表示规则中第一个依赖文件的目录部分和文件名部分。
$(^D)
$(^F)
分别表示所有依赖文件的目录部分和文件部分(不存在同一文件)。
$(+D)
$(+F)
分别表示所有依赖文件的目录部分和文件部分(可存在重复文件)。
$(?D)
$(?F)
分别表示被更新的依赖文件的目录部分和文件部分。
一般在我们书写Makefile时,各部分变量引用的格式我们建议如下:
1. make变量(Makefile中定义的或者是make的环境变量)的引用使用“$(VAR)”格式。
2. 出现在规则命令行中shell变量(一般为执行命令过程中的临时变量,它不属于Makefile变量,而是一个shell变量)引用使用shell的“$tmp”格式。
gcc -o run stack.o main.o
可以看到,make命令会自动推导出如何根编出.o文件来。如果我们的项目文件变化了,只需要改objs变量即可,非常方便。
不过,有的时候我们可能觉得这中自动推导的方式不够用,需要手动控制编译选项,这个时候我们可以自己指定推导规则:
CC = gcc
linux编程基础——Makefile

gcc和gdb的使用 linux

gcc和gdb的使用 linux

漳州师范学院
实验报告
班级 11网络2班学号姓名座号 15 同组人
实验日期成绩
课程名称:操作系统
实验题目:gcc和gdb的使用
实验目的与要求1.掌握Linux操作系统下最常用的c语言编译器gcc的使用;2.掌握Linux操作系统下最常用的代码调试器gdb的使用;3.掌握调试代码的基本方法,如观察变量、设置断点等







PC 兼容机。

Window xp 以上操作系统
第 1 页
实验内容与具体步骤将下面的程序输入到一个文件名字为test.c的磁盘文件中,利用调试程序找出其中的错误,修改后存盘。

该程序的功能是显示一个简单的问候语,然后用反序方式将它列出。

漳州师院实验报告
实验内容与具体步骤
实验心得实验中存在的问题及解决办法:
1. 在用gdb进行调试的时候,会运用到一些比如以行号设置断点、以函数名设置断点、以条件表达式设置断点、删除断点、查看和设置变量的值、查看当前设置的断点信息等命令,通过老实讲的以及上网查询的方式找到了这些命令的使用方法。

2. 在编译第一个程序的时候,第一次出现了很多语法错误,通过自己改正了之后解决了这些错误。

3.本次实验学习了一下gcc与gdb的具体使用方法。

并亲自用gdb调试了一下程序。

gdb还是用不熟,只能以后慢慢加深体会了。

注:如果填写内容超出表格,自行添加附页。

漳州师院实验报告。

linuxgcc命令及用法

linuxgcc命令及用法

linuxgcc命令及用法Linux的gcc命令是一款非常强大的编译器,用于将源代码转换为可执行文件。

本文将详细介绍gcc命令及其常用的用法,帮助读者更好地理解和使用这款工具。

一、gcc命令的基本语法结构gcc是GNU Compiler Collection(GNU编译器集合)的简称,因此其命令基本语法结构一般为:shellgcc [选项] [输入文件]其中,选项用于指定编译时的相关参数,输入文件则是需要编译的源文件。

二、gcc命令的常用选项gcc命令提供了许多选项,用于控制编译过程及生成的可执行文件的属性。

下面是一些常用的gcc选项及其作用:1. -o:用于指定输出文件的名称。

例如,使用`-o myprogram`选项将输出文件命名为myprogram。

2. -c:仅进行编译,不进行链接操作。

这个选项常用于编译多个源文件时,先将每个源文件编译为目标文件,再进行链接操作。

3. -g:生成调试信息。

这个选项会在编译时生成与调试器兼容的调试信息,方便开发人员进行程序调试。

4. -Wall:显示所有警告信息。

使用这个选项可以使编译器在编译时输出更多的警告信息,帮助开发人员提前发现潜在的问题。

5. -I:指定头文件的搜索路径。

使用这个选项可以告诉编译器在指定的路径中查找头文件,方便引用外部库、模块等。

6. -L:指定库文件的搜索路径。

与-I选项类似,这个选项用于告诉编译器在指定的路径中查找库文件,用于链接时的库文件搜索。

7. -l:指定要链接的库文件。

使用这个选项可以显式地告诉编译器要链接的库文件,如:-lmath将链接math库文件。

三、gcc命令的应用实例下面通过几个实例来演示gcc命令的具体用法,以帮助读者更好地理解和掌握这款工具。

1. 编译单个源文件并生成可执行文件假设我们有一个名为`hello.c`的源文件,内容如下:c#include <stdio.h>int main() {printf("Hello, World!\n");return 0;}我们可以使用以下命令将其编译为可执行文件`hello`:shellgcc -o hello hello.c编译成功后,即可在当前目录下生成名为`hello`的可执行文件。

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 编译器,你可以高效地组织和管理你的代码编译过程。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
GNU C ANSI C (标准 C ) GNU C --支持GNU 扩展的C 语言。GNU CC 对C 语言提供了很多扩展,这些扩展对优化、 目标代码布局、更安全的检查等方面提供了很 强的支持。 Linux 内核代码使用了大量的 GNU C 扩展,以 至于能够编译 Linux 内核的唯一编译器是 GNU CC,以前甚至出现过编译 Linux 内核要使用特 殊的 GNU CC 版本的情况。

命令 x X
说明 删除光标后的字符 删除光标前的字符
功能键 Delete
dd
ndd r
删除光标所在的行
删除包括光标所在行 的n行文本 修改光标所在字符

R s
进入替换状态,直到按Esc回 Insert 到命令模式为止 删除光标所在字符,并进入输 入模式
Linux编程基础


目录
1 2 3 4
Linux开发基础
Linux下的编辑工具
GCC与GDB的使用
Make与Makefile
LINUX 开发基础介绍

Linux 的编程常识 Linux下VIM的使用 编译器GCC的使用 调试器gdb的使用 项目管理工具make的使用

Linuxห้องสมุดไป่ตู้编程环境概述
主要涉及到编辑器、编译链接器、调试器及项目管理工具。 编辑器 Linux 中最常用的编辑器有 Vi(Vim)和 Emacs 编译链接器 在Linux中,最常用的编译器是Gcc编译器。它是GNU推 出的功引导代码能强大、性能优越的多平台编译器. 调试器 Gdb 是绝大多数 Linux 开发人员所使用的调试器,它可 以方便地设置断点、单步跟踪等
vi是Linux最常用的编辑器,Linux里提供的是vi的 加强版——vim,但同VI是完全兼容。 vim进入:
• 在系统提示符下键入命令vim,后面跟上想要编辑 (或者建立)的文件名,VIM 可以自动载入所要编辑 的文件或是开启一个新文件。
VIM的退出:
• 可以在命令行方式下使用命令“:wq”或者“:q!”, 前者的功能是写文件并从VIM中退出,后者的功能是 从VIM中退出,但不保存所作的修改(注意冒号)。
插入模式
• 在命令模式下按“a”、“i”、“o”进入插入模式。
末行命令模式
• 也是一种常用模式,用于输入命令进行文字编辑的 辅助功能。通过冒号“:”进入末行模式。例如 “:q”

vi的常用命令
命令
h I
说明
向左移一个字符 向右移一个字符
功能键
← →
J
k 0 $
向上移一个字符
Vim的图形版本gvim;
二、Linux下VIM的使用
Vi 3种基本工作模式:命令模式、插入模式、末行模式。
二、Linux下VIM的使用
VI 3种基本工作模式: 命令模式下
• 键入的每个字符都被当作一个命令处理。刚启动时, 处于命令模式。在插入模式下按“ESC”,也可以回 到指令模式。

GCC编译器的使用
GCC的选项 GCC 有超过100个的编译选项可用. 主要包括编译处理 选项、警告选项、出错选项、优化选项、体系结构选 项。 -c,只编译,不连接成为可执行文件,编译器只是由 输入的.c等源代码文件生成.o为后缀的目标文件,通 常用于编译不包含主程序的子程序文件。 -o output_filename,确定输出文件的名称为 output_filename,同时这个名称不能和源文件同名。 如果不给出这个选项,gcc就给出预设的可执行文件 a.out。 -S 编译选项告诉 GCC 在为 C 代码产生了汇编语言文 件后停止编译. GCC 产生的汇编语言文件的缺省扩展 名是 .s .
一般c程序就用gcc编译,c++程序就用g++编译

Linux 编程环境概述
项目管理器 Linux 中的项目管理器“make” 是一种控制编译 或者重复编译软件的工具。 它还能自动管理软件编译的内容、方式和时机, 使程序员能够把精力集中在代码的编写上而不 是在源代码的组织上。

二、Linux下VIM的使用
GCC编译器的使用
Gcc的编译流程分4个步骤: 预处理(Pre-Processing) 编译(Compiling) 汇编(Assembling) 链接(Linking) 每个阶段分别调用不同的工具进行处理。
源 程 序 (*.c)
预处理
编译
汇编
链接
可执行文件
预处理器
编译器
汇编器

命令 A i I
命令说明 从光标所在行最后面的地方开始新增文本 从光标所在位置前面开始插入文本 从光标所在列的第一个非空白字元前面开始插入 文本
o O
在光标所在列下新增一行并进入输入模式 在光标所在列上方新增一行并进入输入模式

命令 :q :q! :w :w filename :wq
向下移一个字符

↓ Home End
移至该行之首 移至该行之末

H M L G
移至窗口的第一行 移至窗口的中间那行 移至窗口的最后一行 移至该文件的最后一行
nG
Ctrl+f Ctrl+b ^
移至该文件的第 n 行
向后翻一页 向前翻一页 移至该行的第一个非空白字 符处 PageDow n PageUp

GCC编译器的使用
GCC 通常gcc后跟一些选项和文件名来使用 GCC 编 译器 gcc [options] [filenames] 其中options就是编译器所需要的参数, filenames给出相关的文件名称 例如:gcc –o hello hello.c
Linux 的编程常识
C 语言编程风格
Linux 内核编程风格
• 缩进:Linux内核缩进风格是8个字符。 • 括号的位置:将开始的大括号放在一行的最 后,而将结束的大括号放在一行的第一位。 • 命名:命名尽量简洁。 • 函数:函数最好短小精悍,而且只能做一件 事。 • 详见: /usr/src/linux/Documentation/CodingStyle
连接器
GCC编译器的使用
源 程 序 (*.c)
预处理
编译
汇编
链接
可执行文件
预处理器
编译器
汇编器
连接器


GCC首先调用预处理程序cpp进行预处理,展开程序代码中 的宏,并在其中插入头文件所包含的内容; 把预处理后的源代码编译产生汇编代码; 调用as汇编器处理这些汇编代码产生目标代码; 通过ld连接器创建二进制可执行文件或者建立库文件。

GCC编译器的使用
GCC(GNU Compiler Collection) GNU CC(简称为 Gcc)是 GNU 项目中符合 ANSI C 标准的编译系统,能够编译用 C、C++ 和 Object C 等语言编写的程序。 Gcc 又是一个交叉平台编译器 在当前CPU平 台上为多种不同体系结构的硬件平台开发软件。 适合在嵌入式领域的开发编译。
GCC编译器的使用
库和头文件的保存位置 函数库 • 预先编译好的函数集合 • /lib:系统必备共享库 • /usr/lib:标准共享库和静态库 • /usr/X11R6/lib:X11R6 的函数库 • /usr/local/lib:本地函数库 头文件 • 程序的设计需要头文件来提供常数的定义和库函数 调用的声明 • /usr/include:系统头文件 • /usr/local/include:本地头文件
GCC编译器的使用
Gcc的编译流程
预处理阶段: gcc –E hello.c –o hello.i 编译阶段: gcc –S hello.i –o hello.s 汇编阶段:gcc –c hello.s –o hello.o 链接阶段:gcc hello.o –o hello gcc hello.c -o hello 执行:./hello

GCC编译器的使用
gcc则通过后缀来区别输入文件的类别。 gcc所遵循的部分 后缀约定规则: .c : C语言源代码文件; .a : 是由目标文件构成的档案库文件; .C,.cc或.cxx : 是C++源代码文件; .h : 是程序所包含的头文件; .i : 是已经预处理过的C源代码文件; .ii : 是已经预处理过的C++源代码文件; .o : 是编译后的目标文件; .s : 是汇编语言源代码文件; .S : 是经过预编译的汇编语言源代码文件。
GCC编译器的使用
GCC 选项 -Idirname,在头文件的搜索路径列表中添加dirname目 录。这个选项的作用是:到指定的dirname目录中去寻 找需要的头文件。 -Ldirname,在库文件的搜索路径列表中添加dirname目 录。在预设状态下,连接程序ld在系统的预设路径中 (如/usr/lib)寻找所需要的档案库文件,这个选项 告 诉连接程序,首先到-L指定的目录中去寻找,然后到系 统预设路径中寻找。 -lname,在连接时,装载名字为“libname.a”的函数 库,该函数库位于系统预设的目录或者由-L选项确定的 目录下。例如,-lm表示连接名为“libm.a”的数学函 数库。
说明 结束编辑 强制离开vi,放弃存盘 存盘 将编辑内容保存为名为filename的文件 存盘并退出

Vim练习
建立一个新文件 输入字符 复制第一行到第二行 复制第一二行到第三行 撤销上面的步骤 删除第二行 保存推出

GCC编译器的使用
GCC编译器的使用
GCC 选项 -g,产生符号调试工具(GNU的gdb)所必要的 符号信息,要想对可执行程序进行调试,我 们就必须加入这个选项。 -O,对程序进行优化编译、连接,产生的可 执行文件的执行效率可以提高,但是,编译、 连接的速度就相应地要慢一些。 -O2,比-O更好的优化编译、连接,当然整个 编译、连接过程会更慢。
相关文档
最新文档