已阅读5页,还剩15页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验一 实验一 REDHATREDHAT 9 09 0的安装和使用的安装和使用 一 实验目的 通过本实验 使学生掌握REDHAT 9 0 的安装方法和步骤 掌握REDHAT 9 0 的常用 界面使用 熟悉REDHAT 9 0 的文件系统结构及其硬件管理 二 实验原理和说明 在LINUX 下 没有C 之类的硬盘分区概念啦 最大的就是一个 这个在您安装 REDHAT 的时候就必须有了解 否则您就无法完成安装 对Red Hat Linux 用户来说无论有几个分区 分给哪一目录使用 它归根结底就只有一 个根目录 一个独立且唯一的文件结构 Red Hat Linux 中每个分区都是用来组成整个文件 系统的一部分 因为它采用了一种叫 载入 的处理方法 它的整个文件系统中包含了一 整套的文件和目录 且将一个分区和一个目录联系起来 这时要载入的一个分区将使它的 存储空间在一个目录下获得 对于IDE 硬盘 驱动器标识符为 hdx 其中 hd 表明分区所在设备的类型 这里是 指IDE 硬盘了 x 为盘号 a 为基本盘 b 为基本从属盘 c 为辅助主盘 d 为辅助从属 盘 代表分区 前四个分区用数字1 到4 表示 它们是主分区或扩展分区 从5 开始就 是逻辑分区 例 hda3 表示为第一个IDE 硬盘上的第三个主分区或扩展分区 hdb2 表示为 第二个IDE 硬盘上的第二个主分区或扩展分区 对于SCSI 硬盘则标识为 sdx SCSI 硬盘是用 sd 来表示分区所在设备的类型的 其余则和IDE 硬盘的表示方法一样 boot 分区 它包含了操作系统的内核和在启动系统过程中所要用到的文件 建这个 分区是有必要的 因为目前大多数的PC 机要受到BIOS 的限制 况且如果有了一个单独的 boot 启动分区 即使主要的根分区出现了问题 计算机依然能够启动 usr 分区 是Red Hat Linux 系统存放软件的地方 如有可能应将最大空间分给它 home 分区 是用户的home 目录所在地 这个分区的大小取决于有多少用户 var log 分区 是系统日志记录分区 如果设立了这一单独的分区 这样即使系统的日志 文件出现了问题 它们也不会影响到操作系统的主分区 tmp 分区 用来存放临时文件 bin 分区 存放标准系统实用程序 dev 分区 存放设备文件 opt 分区 存放可选的安装的软件 sbin 分区 存放标准系统管理可执行文件 如insmod ifconfig 等 上面介绍了几个常用的分区 一般来说需要一个SWAP 分区 一个 boot 分区 一个 usr 分区 一个 home 分区 一个 var log 分区 当然这没有什么规定 完全是依照个人 来定的 但记住至少要有两个分区 一个SWAP 分区 一个 分区 三 实验内容和步骤 1 1 REDHATREDHAT 9 09 0 的安装 选做 的安装 选做 安装时 建议安装英文English 不要选择中文 否则在后续的字符界面下的信息都会 出现乱码 另外安装向导会弹出对话框询问您安装服务器或工作站等 请选择自定义 Custom 安装过程中可以指定PC 机上网卡的IP 地址 由于我们的开发套件在烧写时默认的IP 为192 168 2 122 所以建议您的PC 机也在此网段 192 168 2 X IP 地址可以在安装时 指定 也可以在PC 机安装好以后指定 在配置防火墙 Firewall 时 请务必选择不安装防火墙 No Firewall 在选择软 件Package 时选择最后一项 Everything 即完全安装 完全安装完以后 大概占用4 8GB 的硬盘空间 最后会让您选择Linux 启动以后进入XWindows 模式 Graphic 还是字符模式 Text 系统默认的是Graphic 即一启动就进入XWINDOWS 建议改为字符模式 因为进 入字符模式时启动花费的时间少一些 而且我们进行开发也建议使用字符模式 当然了 即使您安装选择了启动进入X windows 也可以按Ctrl Alt Fnx x 在默认 情况可以是1 2 6 输入安装RedHat 时节输入的用户名 root 或已经建立的其它 用户 和密码 即可进入操作系统的Shell 提示符 就像 root localhost root 2 2 基本命令及其使用 基本命令及其使用 1 ls 显示当前目录下的所有文件和目录 ls a 可以看到隐藏的文件 如以 开头的文件 pwd 显示当前目录路径 ps 列举当前TTY 下所有进程 ps A 列举所有 cd 目录名 进入目录 mkdir 目录名 创建目录 rmdir 目录名 删除空目录 rm rf 目录名 强行删除整个目录内容 无法恢复 其中f 表示强制不进行提示 r 表示目录递归 LINUX 下的文件和目录是区分大小写的 TAB 文件目录匹配搜索的使用 例如华恒软件安装的目录为 HHARM9 EDU 假设 目录下没有其它以HHA 字符开头的 其它目录和文件 则要进入这个目录 只需敲入 cd HHA 然后按下TAB 键 则SHELL 会自动匹配找到 HHARM9 EDU 目录 这样就不必完全键入 剩余的RM2410 R3 字符 这个功能在访问名字很长的文件和目录时非常有效 可以大大提 供键盘输入的速度 极为方便 2 2 查看 查看 修改修改PCPC 机机IPIP 地址 地址 ifconfig ifconfig eth0 192 168 2 122 3 3 压缩 压缩 解压缩 解压缩 LINUX 的软件一般是以 gz 或 tar 或者 tar gz 结尾的 前者是由gzip 压缩的 后 者是先用tar 归档 在用gzip 压缩而成的 1 以 gz 结尾的为压缩文件 用命令 gzip d filename 来解压 得到的文件在 当前目录中 但已没有了 gz 2 以 tar 结尾的为归档文件 用命令 tar xvf filename 来展开 生成的文件 与源文件在同一目录中 只是少了 tar 3 以 tar gz 结尾的文件最常见 可直接用命令 gzip cd filename tar xfv 来解开 4 4 tartar 的用法 的用法 解压 x 参数表示解压 tar xzf HHARM9 EDU tgz 把一个目录HHARM9 EDU 压缩成一个文件 HHARM9 EDU tgz tar czf HHARM9 EDU tgz HHARM9 EDU c 参数表示压缩 5 5 查找与搜索 查找与搜索 如 main c find name main c 或者 locate shadow 注意 locate 为模糊匹配 它会递归的在当前目录下的所有子目录下搜索 并列 出所有名字包含shadow 字串的文件 在一个目录下 含子目录 的所有文件中搜索含有某个字符串 如 Modifiedby hhcn 的所有文件 grep Modified by hhcn r 注意注意 LINUX 里面是大小写敏感的 3 3 对各种文件系统的访问 对各种文件系统的访问 mountmount 命令命令 在Linux 中对其他硬盘逻辑分区 软盘 光盘的使用与我们通常在DOS 与Windows 中 的使用方法是不一样的 不能直接访问 因为在Linux 中它们都被视为文件 因此在访问 使用前必须使用装载命令mount 将它们装载到系统的 mnt 目录中来 使用结束 必须进行 卸载 命令格式如下 mount t 文件系统类型 设备名 装载目录 文件类型常用的有 msdos dos 分区文件 ext2 Linux 的文件系统 swap Linux swap 分区或swap 文件 iso9660 安装CD ROM 的文件系统 vfat 支持长文件名的dos 分区 hpfs OS 2 分区文件系统 设备名是指要装载的设备的名称 如软盘 硬盘 光盘等 软盘一般为 dev fd0 fd1 硬盘一般为 dev hda hdb 硬盘逻辑分区一般为期hda1hda2 等等 光盘一般为 dev hdc 在装载前一般要在 dev mnt 目录下建立一个空的目录 如软盘为floppy 硬盘 分区为其盘符如c d 等等 光盘为cd rom 使用命令 mount t msdos dev fd0 mnt floppy 装载一个mddos 格式的软盘 mount t ext2 dev fd0 mnt floppy 装载一个Linux 格式的软盘 mount t vfat dev hda1 mnt c 装载Windows98 格式的硬盘分区 mount t iso9660 dev hdc mnt cd rom 装载一个光盘 装载完成之后便可对该目录进行操作 在使用新的软盘及光盘前必须退出该目录 使 用卸载命令进行卸载 方可使用新的软盘及光盘 否则系统不会承认该软盘的 光盘在卸 载前是不能用光驱面板前的弹出键退出的 对于嵌入式LINUX 而言 rootfs JFFS2 RAMDISK CRAMFS YAFFS NFS 等等所有的文件 系统都是通过mount 加载的 所以mount 是LINUX 下一个非常重要的命令 4 vi 编辑器和编辑器和 gdb 调试器调试器 文本编辑器可以说是计算机最基本的应用 修改设置文件 编写程序或者建立文件修改设置文件 编写程序或者建立文件都 需要用到它 Linux 提供了齐全的文本编辑器 可以让用户按照自己的喜好进行选择 可 以对 Linux 下的编辑器有一个深入的了解 为今后编程打下良好基础 4 1 vim 概述及应用概述及应用 vim vi improve 可以说是可以说是 Linux 中功能最为强大的编辑器 它是由中功能最为强大的编辑器 它是由 UNIX 系统下的传系统下的传 统文本编辑器统文本编辑器 vi 发展而来的 发展而来的 下面首先介绍一下 vi vi 是个可视化的编辑器 vi 就意味着可视化 visual 那么 什么是可视化的编辑器 呢 可视化的编辑器就是可以在编辑文本的时候看到它们 非可视化的编辑器的例子可以 举出不少 如 ed sed 和 edlin 它是 DOS 自带的最后一个编辑器 等 vi 成为 BSD UNIX 的一部分 后来 AT for i 0 i n i sum i return sum main int i long result 0 for i 1 i 100 i result i printf result 1 100 d n result printf result 1 250 d n func 250 编译生成执行文件 Linux 下 david DAVID david gcc g test c o test 使用 gdb 调试 david DAVID david gdb test 启动启动 gdb GNU gdb Red Hat Linux 5 3post 0 20021129 18rh Copyright 2003 Free Software Foundation Inc gdb is free software covered by the GNU General Public License and you are welcome to change it and or distribute copies of it under certain conditions Type show copying to see the conditions There is absolutely no warranty for gdb Type show warranty for details This gdb was configured as i386 redhat Linux gnu gdb 键入键入 l 命令相当于命令相当于 list 命令 从第一行开始列出源码 命令 从第一行开始列出源码 david DAVID david gdb test GNU gdb Red Hat Linux 5 3post 0 20021129 18rh Copyright 2003 Free Software Foundation Inc gdb is free software covered by the GNU General Public License and you are welcome to change it and or distribute copies of it under certain conditions Type show copying to see the conditions There is absolutely no warranty for gdb Type show warranty for details This gdb was configured as i386 redhat Linux gnu gdb l 7 8 sum i 9 10 return sum 11 12 13 main 14 15 int i 16 long result 0 gdb 17 for i 1 i 100 i 18 19 result i 20 21 printf result 1 100 d n result 22 printf result 1 250 d n func 250 23 gdb break 16 设置断点 在源程序第设置断点 在源程序第 16 行处 行处 Breakpoint 1 at 0 x804836a file test c line 16 gdb break func 设置断点 在函数设置断点 在函数 func 入口处 入口处 Breakpoint 2 at 0 x804832e file test c line 5 gdb info break 查看断点信息 查看断点信息 Num Type Disp Enb Address What 1 breakpoint keep y 0 x0804836a in main at test c 16 2 breakpoint keep y 0 x0804832e in func at test c 5 gdb r 运行程序 运行程序 run 命令简写命令简写 Starting program home david test Breakpoint 1 main at test c 16 在断点处停住 16 long result 0 gdb n 单条语句执行 单条语句执行 next 命令简写 命令简写 17 for i 1 i 100 i gdb n 19 result i gdb n 17 for i 1 i 100 i gdb n 19 result i gdb n 17 for i 1 i 100 i gdb c 继续运行程序 继续运行程序 continue 命令简写 命令简写 Continuing result 1 100 5050 程序输出 Breakpoint 2 func n 250 at test c 5 5 int sum 0 i gdb n 6 for i 0 i n i gdb p I 打印变量打印变量 i 的值 的值 print 命令简写 命令简写 1 1107620064 gdb n 8 sum i gdb n 6 for i 0 i n i gdb p sum 2 0 gdb bt 查看函数堆栈 查看函数堆栈 0 func n 250 at test c 6 1 0 x080483b2 in main at test c 22 2 0 x42015574 in libc start main from lib tls libc so 6 gdb finish 退出函数 退出函数 Run till exit from 0 func n 250 at test c 6 0 x080483b2 in main at test c 22 22 printf result 1 250 d n func 250 Value returned is 3 31125 gdb c 继续运行 Continuing result 1 250 31125 Program exited with code 027 程序退出 调试结束 gdb q 退出退出 gdb david DAVID david 有了以上的感性认识 下面来系统地学习一下 gdb 2 使使 用用 gdb gdb 主要调试的是 C C 的程序 要调试 C C 的程序 首先在编译时 必须要把调首先在编译时 必须要把调 试信息加到可执行文件中 使用编译器试信息加到可执行文件中 使用编译器 cc gcc g 的的 g 参数即可 参数即可 如 david DAVID david gcc g hello c o hello david DAVID david g g hello cpp o hello 如果没有 g 将看不见程序的函数名和变量名 代替它们的全是运行时的内存地址 当用 g 把调试信息加入 并成功编译目标代码以后 看看如何用 gdb 来调试 启动 gdb 的方法有以下几种 1 gdb program 也就是执行文件 一般在当前目录下 2 gdb core 用 gdb 同时调试一个运行程序和 core 文件 core 是程序非法执行后 core dump 后产 生的文件 3 gdb 如果程序是一个服务程序 那么可以指定这个服务程序运行时的进程 ID gdb 会自动 attach 上去 并调试它 program 应该在 PATH 环境变量中搜索得到 gdb启动时 可以加上一些启动时 可以加上一些gdb的启动开关 详细的开关可以用的启动开关 详细的开关可以用gdb help查看 查看 4 3 gcc 在为 Linux 开发应用程序时 绝大多数情况下使用的都是 C 语言 因此几乎每一位 Linux 程序员面临的首要问题都是如何灵活运用 C 编译器 目前 Linux 下最常用的 C 语言 编译器是 gcc GNU Compiler Collection 它是 GNU 项目中符合 ANSI C 标准的编译系统 能够编译用 C C 和 Object C 等语言编写的程序 gcc 不仅功能十分强大 结构也异常灵 活 最值得称道的一点就是它可以通过不同的前端模块来支持各种语言 如 Java Fortran Pascal Modula 3 和 Ada 等 gcc 是可以在多种硬体平台上编译出可执行程 序的超级编译器 其执行效率与一般的编译器相比 平均效率要高 20 30 gcc 支持编 译的一些源文件的后缀及其解释见表 1 表 1 gcc 所支持的语言 后 缀 名所支持的语言 cC 原始程序 CC 原始程序 ccC 原始程序 cxxC 原始程序 mObjective C 原始程序 i已经过预处理的 C 原始程序 ii已经过预处理的 C 原始程序 s组合语言原始程序 S组合语言原始程序 h预处理文件 标头文件 o目标文件 a存档文件 开放 自由和灵活是 Linux 的魅力所在 而这一点在 gcc 上的体现就是程序员通过它 能够更好地控制整个编译过程 在使用 gcc 编译程序时 编译过程可以细分为 个阶段 预处理 Pre Processing 编译 Compiling 汇编 Assembling 链接 Linking Linux 程序员可以根据自己的需要让 gcc 在编译的任何阶段结束 检查或使用编译器 在该阶段的输出信息 或者对最后生成的二进制文件进行控制 以便通过加入不同数量和 种类的调试代码来为今后的调试做好准备 与其他常用的编译器一样 gcc 也提供了灵活 而强大的代码优化功能 利用它可以生成执行效率更高的代码 gcc 提供了 30 多条警告信息和 3 个警告级别 使用它们有助于增强程序的稳定性和可 移植性 此外 gcc 还对标准的 C 和 C 语言进行了大量的扩展 提高了程序的执行效率 有助于编译器进行代码优化 能够减轻编程的工作量 2 使使 用用 gcc gcc 的版本可以使用如下 gcc v 命令查看 david DAVID david gcc v Reading specs from usr lib gcc lib i386 redhat linux 3 2 2 specs Configured with configure prefix usr mandir usr share man infodir sr share info enable shared enable threads posix disable checking with ystem zlib enable cxa atexit host i386 redhat linux Thread model posix gcc version 3 2 2 20030222 Red Hat Linux 3 2 2 5 以上显示的就是 Redhat linux 9 0 里自带的 gcc 的版本 3 2 2 下面将以一个实例来说明如何使用 gcc 编译器 例 1 能够帮助大家迅速理解 gcc 的工 作原理 并将其立即运用到实际的项目开发中去 实例 1 hello c include int main int argc char argv printf Hello Linux n 要编译这个程序 只要在命令行下执行如下命令 david DAVID david gcc hello c o hello david DAVID david hello Hello Linux 这样 gcc 编译器会生成一个名为 hello 的可执行文件 然后执行 hello 就可以看到程 序的输出结果了 命令行中 gcc 表示用 gcc 来编译源程序 o 选项表示要求编译器输出的可执行文件名 为 hello 而 hello c 是源程序文件 从程序员的角度看 只需简单地执行一条 gcc 命令就 可以了 但从编译器的角度来看 却需要完成一系列非常繁杂的工作 首先 gcc 需要调 用预处理程序 cpp 由它负责展开在源文件中定义的宏 并向其中插入 include 语句所包含 的内容 接着 gcc 会调用 ccl 和 as 将处理后的源代码编译成目标代码 最后 gcc 会调用 链接程序 ld 把生成的目标代码链接成一个可执行程序 为了更好地理解 gcc 的工作过程 可以把上述编译过程分成几个步骤单独进行 并观 察每步的运行结果 第一步要进行预编译 使用 E 参数可以让 gcc 在预处理结束后停止编译过程 david DAVID david gcc E hello c o hello i 此时若查看 hello i 文件中的内容 会发现 stdio h 的内容确实都插到文件里去了 而且 被预处理的宏定义也都作了相应的处理 1 hello c 1 1 1 hello c 1 usr include stdio h 1 3 28 usr include stdio h 3 1 usr include features h 1 3 291 usr include features h 3 1 usr include sys cdefs h 1 3 292 usr include features h 2 3 314 usr include features h 3 1 usr include gnu stubs h 1 3 315 usr include features h 2 3 29 usr include stdio h 2 3 1 usr lib gcc lib i386 redhat linux 3 2 2 include stddef h 1 3 213 usr lib gcc lib i386 redhat linux 3 2 2 include stddef h 3 typedef unsigned int size t 35 usr include stdio h 2 3 1 usr include bits types h 1 3 28 usr include bits types h 3 1 usr include bits wordsize h 1 3 29 usr include bits types h 2 3 1 usr lib gcc lib i386 redhat linux 3 2 2 include stddef h 1 3 32 usr include bits types h 2 3 hello i 838L 16453C 1 1 Top 下一步是将 hello i 编译为目标代码 这可以通过使用 c 参数来完成 david DAVID david gcc c hello i o hello o gcc 默认将 i 文件看成是预处理后的 C 语言源代码 因此上述命令将自动跳过预处理 步骤而开始执行编译过程 也可以使用 x 参数让 gcc 从指定的步骤开始编译 最后一步是 将生成的目标文件链接成可执行文件 david DAVID david gcc hello o o hello 在采用模块化的设计思想进行软件开发时 通常整个程序是由多个源文件组成的 相 应地就形成了多个编译单元 使用 gcc 能够很好地管理这些编译单元 假设有一个由 david c 和 xueer c 两个源文件组成的程序 为了对它们进行编译 并最终生成可执行程序 davidxueer 可以使用下面这条命令 david DAVID david gcc david c xueer c o davidxueer 如果同时处理的文件不止一个 gcc 仍然会按照预处理 编译和链接的过程依次进行 如果深究起来 上面这条命令大致相当于依次执行如下 3 条命令 david DAVID david gcc david c o david o david DAVID david gcc xueer c o xueer o david DAVID david gcc david o xueer o o davidxueer 在编译一个包含许多源文件的工程时 若只用一条gcc命令来完成编译是非常浪费时间的 假设项目中有100个源文件需要编译 并且每个源文件中都包含10 000行代码 如果像上面 那样仅用一条gcc命令来完成编译工作 那么gcc需要将每个源文件都重新编译一遍 然后 再全部链接起来 很显然 这样浪费的时间相当多 尤其是当用户只是修改了其中某一个 文件的时候 完全没有必要将每个文件都重新编译一遍 因为很多已经生成的目标文件是 不会改变的 要解决这个问题 关键是要灵活运用gcc 同时还要借助像make这样的工具 4 4 make 使用及使用及 Makefile 文件的设计文件的设计 4 4 1 make make 是一个解释 makefile 文件中的指令的命令工具 一般来说 大多数的 IDE 都有 这个命令 比如 Delphi 的 make Visual C 的 nmake Linux 下 GNU 的 make 什么是 makefile 文件 make 命令执行时 需要一个 makefile 文件 以告诉 make 命令 需要怎样去编译和连接程序 或许很多 Windows 程序员都不知道这个工具 因为那些 Windows 的 IDE 都没有提供该功能 作为一个专业的程序员尤其是作为 Linux 下的程序员 要进行 Linux 下的软件编程 理解 makefile 文件是必需的 因为会不会写 makefile 文件 直接关系到是否具备完成大型工程的能力 makefile 文件关系到了整个工程的编译规则 这就好像尽管现在有很多 HTML 编辑器 但如果想成为一个专业网页设计师 还需要了解 HTML 标识的含义一样 一个工程中的源文件数量很多 其按类型 功能 模块分别放在若干个目录中 makefile 文件定义了一系列的规则来指定哪些文件需要先编译 哪些文件需要后编译 哪 些文件需要重新编译 甚至进行更复杂的操作 makefile 文件就像一个 Shell 脚本 其中也 可以执行操作系统的命令 makefile 文件带来的好处是 自动化编译 一旦写好 只 需要一个 make 命令 就可自动编译整个工程 极大地提高了软件开发的效率 1 1 makefile 实例文件分析 本部分将用一个示例来说明如何建立一个 makefile 文件 以便给大家一个感性认识 这个示例来源于 GNU 的 make 使用手册 工程中有 8 个 C 文件和 3 个头文件 要写一个 makefile 文件来告诉 make 命令如何编译和连接这几个文件 makefile 文件的操作规则是 如果这个工程没有编译过 所有 C 文件都要编译并被连接 如果这个工程的某几个 C 文件被修改 只需编译被修改的 C 文件 并连接目标程序 如果这个工程的头文件被改变了 需要编译引用了这几个头文件的 C 文件 并连接目 标程序 只要 makefile 文件写得足够好 所有的这一切 只用一个 make 命令就可以完成 make 命令会自动智能地根据当前文件的修改情况来确定哪些文件需要重新编译 从而自动 编译所需要的文件并连接目标程序 在讲述这个 makefile 文件之前 还是先来粗略地看一看下面的代码 target prerequisites command 上面的代码中 target 是一个目标文件 可以是 Object 文件 也可以是执行文件 还 可以是一个标签 Label 对于标签的特性 在 5 3 5 节中讲解 prerequisites 是要生成的 target 所需要的文件或是目标 command 是 make 需要执行的命令 任意的 Shell 命令 这是一个文件的依赖关系 target 这一个或多个的目标文件依赖于 prerequisites 中的文 件 其生成规则定义在 command 中 prerequisites 中如果有一个以上的文件比 target 文件 更新的话 command 所定义的命令就会执行 这就是 makefile 文件的规则 也就是 makefile 文件中最核心的内容 下面结合实例作详细说明 1 1 1 make 与 makefile 文件的关系 下面通过一个实例来讲述 make 与 makefile 文件的关系 实例 1 1 是一个完整的 makefile 文件 在一个工程中有 3 个头文件和 8 个 C 文件 其 中应用到了前面讲述的 个规则 实例 1 1 edit main o kbd o command o display o insert o search o files o utils o gcc o edit main o kbd o command o display o insert o search o files o utils o main o main c defs h gcc c main c kbd o kbd c defs h command h gcc c kbd c command o command c defs h command h gcc c command c display o display c defs h buffer h gcc c display c insert o insert c defs h buffer h gcc c insert c search o search c defs h buffer h gcc c search c files o files c defs h buffer h command h gcc c files c utils o utils c defs h gcc c utils c clean rm edit main o kbd o command o display o insert o search o files o utils o 提示 反斜杠 是换行符的意思 这样使 makefile 文件更易读 可以把这个内容保存在 makefile 文件 或 makefile 文件夹 的文件中 然后在该目录下直接输入命令 make 就可以生成执行文件 edit 如果要删除执行文件和所有的中间目标文件 只要简单地执行 一下 make clean 就可以了 在这个 makefile 文件中 目标文件 target 包含如下内容 执行文件 edit 和中间目标文 件 o 依赖文件 prerequisites 即冒号后面的那些 c 文件和 h 文件 每一个 o 文件 都有一组依赖文件 而这些 o 文件又是执行文件 edit 的依赖文件 依赖关系的实质是说 明目标文件由哪些文件生成 换言之 目标文件是哪些文件更新的结果 在定义好依赖关 系后 后续的代码定义了如何生成目标文件的操作系统命令 其一定要以一个 Tab 键作为 开头 提示 make 并不管命令是怎么工作的 它只管执行所定义的命令 make 会比较 targets 文件 和 prerequisites 文件的修改日期 如果 prerequisites 文件的日期比 targets 文件的日期要新 或者 target 不存在 make 就会执行后续定义的命令 另外 clean 不是一个文件 它只不过 是一个动作名字 有点像 C 语言中的 lable 一样 冒号后什么也没有 这样 make 就不会自 动去找文件的依赖性 也就不会自动执行其后所定义的命令 要执行其后的命令 就要在 make 命令后明显地指出这个 lable 的名字 这样的方法非常有用 可以在一个 makefile 文 件中定义不用的编译或是和编译无关的命令 比如程序的打包或备份等 在默认方式下 只输入 make 命令 其会做如下工作 make 会在当前目录下找名字为 makefile 文件 或 makefile 文件夹 的文件 如果 找到 它会找文件中的第一个目标文件 target 在上面的例子中 它会找到 edit 这个文件 并把这个文件作为最终的目标文件 如果 edit 文件不存在 或是 edit 所依赖的后面的 o 文件的修改时间要比 edit 这个文件新 它就会执行后面所定义的命令来生成 edit 文件 如果 edit 所依赖的 o 文件也存在 make 会在当前文件中找目标为 o 文件的依赖性 如 果找到 则会根据规则生成 o 文件 这有点像一个堆栈的过程 当然 C 文件和 H 文件如果存在 make 会生成 o 文件 然后再用 o 文件生成 make 的最终结果 也就是执行文件 edit 这就是整个 make 的依赖性 make 会一层又一层地去找文件的依赖关系 直到最终编 译出第一个目标文件 在找寻的过程中 如果出现错误 比如最后被依赖的文件找不到 make 就会直接退出 并报错 而对于所定义的命令的错误 或是编译不成功 make 就不 会处理 如果在 make 找到了依赖关系之后 冒号后面的文件不存在 make 仍不工作 通过上述分析 可以看出像 clean 这样没有被第一个目标文件直接或间接关联时 它 后面所定义的命令将不会被自动执行 不过 可以显式使 make 执行 即使用命令 make clean 以此来清除所有的目标文件 并重新编译 在编程中 如果这个工程已被编译过了 当修改了其中一个源文件时 比如 file c 根 据依赖性 目标 file o 会被重新编译 也就是在这个依赖性关系后面所定义的命令 则 file o 文件也是最新的 即 file o 文件的修改时间要比 edit 要新 所以 edit 也会被重新连接 了 而如果改变了 command h kdb o command o 和 files o 都会被重新编译 并且 edit 会 被重新连接 1 1 2 在 makefile 文件中使用变量 在上面的例子中 先通过实例 5 2 来看看 edit 的规则 实例 1 2 edit main o kbd o command o display o insert o search o files o utils o gcc o edit main o kbd o command o display o insert o search o files o utils o 可以看到 o 文件的字符串被重复了两次 如果这个工程需要加入一个新的 o 文件 需要在两个位置插入 实际是 个位置 还有一个位置在 clean 中 当然 这个 makefile 文 件并不复杂 所以在两个位置加就可以了 但如果 makefile 文件变得复杂 就要在第 3 个 位置插入 该位置容易被忘掉 从而会导致编译失败 所以 为了 makefile 文件的易维护 在 makefile 文件中可以使用变量 makefile 文件的变量也就是一个字符串 可以理解成 C 语言中的宏 比如 声明一个变量 objects 在 makefile 文件一开始可以这样定义 见实例 1 3 实例 1 3 objects main o kbd
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 46991.1-2025电动汽车车载动力电池耐久性要求及试验方法第1部分:轻型汽车
- 湖南省衡阳市2025-2026学年八年级上学期1月期末考试英语试卷(含答案无听力原文及音频)
- 贵州省铜仁市松桃民族中学2025-2026学年高二上学期期末模拟测试化学试卷(含答案)
- 2026年上海市宝山区初三一模语文试卷(含答案)
- 2025-2026学年辽宁省丹东五中九年级(上)期末数学试卷(含答案)
- 五年级上册语文期末考试卷及答案
- 卫生事业单位面试真题及答案
- 装饰工程、防水工程试题答案
- 部编版三年级语文(下册)期末试卷及答案(今年)
- 双十一光棍节酒店策划
- 广东省花都亚热带型岩溶地区地基处理与桩基础施工技术:难题破解与方案优化
- 家里办公制度规范
- 基于知识图谱的高校学生岗位智能匹配平台设计研究
- GB 4053.3-2025固定式金属梯及平台安全要求第3部分:工业防护栏杆及平台
- 环氧抛砂防滑坡道施工组织设计
- JG/T 3030-1995建筑装饰用不锈钢焊接管材
- 消化系统常见症状与体征课件整理-002
- 流程与TOC改善案例
- 【当代中国婚礼空间设计研究4200字(论文)】
- GB/T 20322-2023石油及天然气工业往复压缩机
- 中国重汽车辆识别代号(VIN)编制规则
评论
0/150
提交评论