Linux下的C编程实战

合集下载

实验一 Linux下C编程

实验一 Linux下C编程

实验一Linux下C编程一、实验目的1、熟悉Linux常用命令。

2、掌握gcc编译器、gdb调试器的使用方法。

3、会编写多文件的C程序,并使用gcc编译。

4、熟悉makefile的结构和编制,利用make命令编译程序。

二、实验原理1、linux不以文件名后缀区分文件类型,但是通常将C源代码以.c结尾,事实证明,在使用GCC编译器时,是要求以.c结尾的。

2、在linux下,编写好的C程序需要编译为二进制的可执行文件才能运行;得到可执行文件要经过以下几个步骤:预处理→汇编→编译→链接→二进制可执行文件。

3、make工具,是程序的自动编译器。

利用时间戳检测文件修改的时间,查看当前哪些文件是更新的,只编译改变了的程序,是一个项目管理工具。

用于大型程序的编制,可节省时间,提高效率。

Makefile的基本格式:(1)目标体:目标文件/可执行文件。

(2)依赖文件。

(3)运行的命令(必须以Tab开头)。

Makefile具有隐含规则和模式规则。

隐含规则:同名的.c文件生成同名的.o文件,不用写main.o、print.o等的编译语句。

模式规则:相同名称的.c生成相同名称的.o文件,这种方式更加显式。

三、实验内容1、编写包含多文件的.c源码,通过调用自定义函数,实现功能:用户输入一个数字,程序计算并输出介于1至此数之间所有个位数为1的素数;如果不存在,则打印-1。

2、直接使用gcc编译多个源文件并运行结果。

3、通过创建动态链接库lib***.so,使得main函数调用自定义函数时,可使用动态链接库,编译生成运行结果。

4、编写Makefile文件,使用make编译并运行。

Linux下面如何进行C语言编程技术教程

Linux下面如何进行C语言编程技术教程

Linux下面如何进行C语言编程技术教程1、源程序的编译在Linux下面,如果要编译一个C语言源程序,我们要使用GNU的gcc编译器。

下面我们以一个实例来说明如何使用gcc编译器。

假设我们有下面一个非常简单的源程序(hello.c):int main(int argc,char **argv){printf("Hello Linux\n");}要编译这个程序,我们只要在命令行下执行:gcc -o hello hello.cgcc 编译器就会为我们生成一个hello的可执行文件,执行./hello就可以看到程序的输出结果了。

命令行中gcc表示我们是用gcc来编译我们的源程序,-o 选项表示我们要求编译器给我们输出的可执行文件名为hello 而hello.c是我们的源程序文件。

gcc编译器有许多选项,一般来说我们只要知道其中的几个就够了,-o选项我们已经知道了,表示我们要求输出的可执行文件名。

-c选项表示我们只要求编译器输出目标代码,而不必要输出可执行文件。

-g选项表示我们要求编译器在编译的时候提供我们以后对程序进行调试的信息。

知道了这三个选项,我们就可以编译我们自己所写的简单的源程序了,如果你想要知道更多的选项,可以查看gcc的帮助文档,那里有着许多对其它选项的详细说明。

2、Makefile的编写假设我们有下面这样的一个程序,源代码如下:/* main.c */#include "mytool1.h"#include "mytool2.h"int main(int argc,char **argv){mytool1_print("hello");mytool2_print("hello");}/* mytool1.h */#ifndef _MYTOOL_1_H#define _MYTOOL_1_Hvoid mytool1_print(char *print_str);#endif/* mytool1.c */#include "mytool1.h"void mytool1_print(char *print_str){printf("This is mytool1 print %s\n",print_str);}/* mytool2.h */#ifndef _MYTOOL_2_H#define _MYTOOL_2_Hvoid mytool2_print(char *print_str);#endif/* mytool2.c */#include "mytool2.h"void mytool2_print(char *print_str){printf("This is mytool2 print %s\n",print_str);}当然由于这个程序是很短的我们可以这样来编译gcc -c main.cgcc -c mytool1.cgcc -c mytool2.cgcc -o main main.o mytool1.o mytool2.o这样的话我们也可以产生main程序,而且也不时很麻烦,但是如果我们考虑一下如果有一天我们修改了其中的一个文件(比如说mytool1.c)那么我们难道还要重新输入上面的命令?写一个SHELL脚本,让她帮我去完成不就可以了。

linux c语言开发实例

linux c语言开发实例

linux c语言开发实例Linux C语言开发实例Linux C语言开发是一种常见的开发方式,它能够为Linux操作系统编写高效的、可靠的和安全的应用程序。

通过使用C语言进行Linux开发,我们可以充分利用Linux操作系统的优势,从而创建出功能丰富且高性能的软件。

本文将以Linux C语言开发实例为主题,介绍一些常见的Linux C语言开发实例,帮助读者了解并掌握如何使用C语言进行Linux开发。

一、Linux C语言开发环境搭建首先,我们需要搭建Linux C语言开发环境。

在大多数Linux发行版中,C语言编译器已经预装在系统中,因此我们只需要使用以下命令安装所需的开发工具:sudo apt-get install build-essential这个命令会自动安装GCC编译器和其他必要的开发工具,如make和g++。

安装完成后,我们就可以开始编写C语言代码并进行Linux开发了。

二、Linux C语言开发示例1. 创建一个Hello World程序我们可以从创建一个简单的Hello World程序开始,这是每个新手学习C 语言的第一个例子。

打开一个文本编辑器,输入以下代码:c#include <stdio.h>int main(){printf("Hello World\n");return 0;}保存文件为hello.c。

接下来,我们需要通过命令行编译这个程序。

打开终端,输入以下命令:gcc -o hello hello.c这个命令将会使用GCC编译器将代码编译成可执行文件。

编译成功后,我们可以使用以下命令运行程序:./hello如果一切顺利,你将在终端中看到输出的"Hello World"。

2. 读写文件Linux C语言开发的另一个常见需求是文件操作。

我们可以使用C语言的标准文件操作函数来读取和写入文件。

c#include <stdio.h>#include <stdlib.h>#define MAX_SIZE 1000int main(){FILE *fp;char str[MAX_SIZE];打开文件fp = fopen("example.txt", "r");if (fp == NULL){printf("无法打开文件!\n");exit(1);}从文件中读取内容fgets(str, MAX_SIZE, fp);printf("文件内容:s", str);关闭文件fclose(fp);return 0;}上述代码将打开名为example.txt的文件,并从文件中读取内容。

Linux下的C编程实战

Linux下的C编程实战

Linux下的C编程实战Linux下的C编程实战(一)――开发平台搭建1.引言Linux操作系统在服务器领域的应用和普及已经有较长的历史,这源于它的开源特点以及其超越Windows的安全性和稳定性。

而近年来,Linux操作系统在嵌入式系统领域的延伸也可谓是如日中天,许多版本的嵌入式Linux系统被开发出来,如ucLinux、RTLinux、ARM-Linux等等。

在嵌入式操作系统方面,Linux的地位是不容怀疑的,它开源、它包含TCP/IP协议栈、它易集成GUI。

鉴于Linux操作系统在服务器和嵌入式系统领域愈来愈广泛的应用,社会上越来越需要基于Linux操作系统进行编程的开发人员。

浏览许多论坛,经常碰到这样的提问:“现在是不是很流行unix/linux下的c编程?所以想学习一下!但是不知道该从何学起,如何下手!有什么好的建议吗?各位高手!哪些书籍比较合适初学者?在深入浅出的过程中应该看哪些不同层次的书?比如好的网站、论坛请大家赐教!不慎感激!”鉴于读者的需求,在本文中,笔者将对Linux平台下C编程的几个方面进行实例讲解,并力求回答读者们关心的问题,以与读者朋友们进行交流,共同提高。

在本文的连载过程中,有任何问题或建议,您可以给笔者发送email:21cnbao@,您也可以进入笔者的博客参与讨论:/21cnbao。

笔者建议在PC内存足够大的情况下,不要直接安装Linux操作系统,最好把它安装在运行VMWare虚拟机软件的Windows平台上,如下图:在Linux平台下,可用任意一个文本编辑工具编辑源代码,但笔者建议使用emacs 软件,它具备语法高亮、版本控制等附带功能,如下图:2.GCC编译器GCC是Linux平台下最重要的开发工具,它是GNU的C和C++编译器,其基本用法为:gcc [options] [filenames]options为编译选项,GCC总共提供的编译选项超过100个,但只有少数几个会被频繁使用,我们仅对几个常用选项进行介绍。

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;}重新编译程序并执行,可以看到在终端中会提示用户输入姓名,并输出相应的问候语。

操作系统实验 Linux下C程序及运行结果

操作系统实验 Linux下C程序及运行结果

实验内容:
消息的创建,发送和接收
使用系统调用msgget(),msgsnd(), msgrev()及msgctl()编制一长度为1k的消息发送
和接收程序。
<程序设计>
为了便于操作和观察结果,用一个程序作为“引子”,先后fork()两个子进程,
SERVER和CLIENT,进行通信。
SERVER端建立一个Key为75的消息队列,等待其他进程发来的消息。当遇到类型
if(p2==0) putchar('c');
else putchar('a');
}
}
进程1截图如下:
进程2程序如下:
#include <stdio.h>
main( )
{
int p1,p2,i; while((p1=fork( ))==-1);
/*创建子进程p1*/
if (p1==0)
while((i=fork())==-1);
if(!i) CLIENT();
wait(0);
wait(0);
}
实验截图如下:
实验四 存储管理
1 实验目的:
通过请求页式存储管理中页面置换算法模拟设计,了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换算法。
2 实验内容:
通过随机数产生一个指令序列,共320条指令;
int tm_mon; //代表目前月份,从一月算起,范围从0-11 int tm_year; //从1900 年算起至今的年数
int tm_wday; //一星期的日数,从星期一算起,范围为0-6 int tm_yday; //从今年1月1日算起至今的天数,范围为0-365
int tm_isdst; //日光节约时间的旗标 };

Linux环境下的C编程

Linux环境下的C编程

实验八Linux环境下的C编程一、实验要求和目的掌握用本文编辑器或Vi编写C程序,利用Gcc对所编写程序进行编译、检错、改错,生成可执行文件,然后使用Gdb对生成的可执行文件进行动态调试、纠错、改错,最后进行实例验证。

二、实验内容和步骤1、编程示例:设定一个整数N,计算1*2+2*3+…+N*(N+1)的和,分别在主函数和func()函数中实现。

(1)在root目录下新建/root/Cpram,在此目录下通过文本编辑器或Vi编写以下内容,并另存为Andx.c#include <stdio.h>#define N 99int func(int n){int sum=0,i;for(i=0;i<=n;i++)sum+=i*(i+1);return sum;}main(){int i;long result=0;for(i=1;i<=N ;i++)result+=i*(i+1);printf("result:1*2+...+%d*%d =%d\n",N,N+1,result);printf("result:1*2+...+%d *%d =%d\n",N,N+1,func(N));}(2)Gcc编译上述C语言源程序①生成预处理文件#gcc –E Andx.c –o Andx.i#cat Andx.i②生成汇编文件#gcc –S AndX.c –o AndX.s#cat AndX.s③生成目标文件#gcc –c Andx.c –o Andx.o④生成带警告信息的可执行文件#gcc –Wall Andx.c –o Andxw⑤为了动态调试的需要带上-g参数进行编译#gcc –g Andx.c –o Andx⑥执行文件Andx,并验证运行结果#./Andx(3)利用gdb进行简单的调试,熟悉相关指令①进入调试环境:#gdb②载入并执行上述可执行文件Andx(gdb)file ./Andx运行可执行文件(gdb)run③列出源代码文件(gdb)list Andx.c:1,30④设置断点,再次运行并单步执行(gdb)break 15运行可执行文件(gdb)run打印result的值(gdb)print result单步执行进入函数内部:(gdb)step单步执行:(gdb)step单步执行:(gdb)next单步执行:(gdb)next跳出循环体:(gdb)until⑤终止调试,并退出gdb环境(gdb)kill退出Gdb环境:(gdb)quit2、仿照示例,请选择以下题目中的任何一个进行编写程序,并对程序进行编译、调试,得到正确的运行结果(1)设定一个整数N,计算1*3+2*5+3*7…+N*(2N+1)的和(2)设定一个整数N,计算1*2+2*4+3*6…+N*2N的和(3)设定一个奇数N,计算 1*3+3*5+…+N*(N+2)的和(4)输入一个偶数N,计算1*3+2*4+3*5+4*2+…+N×(N+2)的和三、实验总结。

linux下的c编程实战之三

linux下的c编程实战之三

Linux下的C编程实战之三1.Linux进程Linux进程在内存中包含三部分数据:代码段、堆栈段和数据段。

代码段存放了程序的代码。

代码段可以为机器中运行同一程序的数个进程共享。

堆栈段存放的是子程序(函数)的返回地址、子程序的参数及程序的局部变量。

而数据段则存放程序的全局变量、常数以及动态数据分配的数据空间(比如用malloc函数申请的内存)。

与代码段不同,如果系统中同时运行多个相同的程序,它们不能使用同一堆栈段和数据段。

Linux进程主要有如下几种状态:用户状态(进程在用户状态下运行的状态)、内核状态(进程在内核状态下运行的状态)、内存中就绪(进程没有执行,但处于就绪状态,只要内核调度它,就可以执行)、内存中睡眠(进程正在睡眠并且处于内存中,没有被交换到SWAP设备)、就绪且换出(进程处于就绪状态,但是必须把它换入内存,内核才能再次调度它进行运行)、睡眠且换出(进程正在睡眠,且被换出内存)、被抢先(进程从内核状态返回用户状态时,内核抢先于它,做了上下文切换,调度了另一个进程,原先这个进程就处于被抢先状态)、创建状态(进程刚被创建,该进程存在,但既不是就绪状态,也不是睡眠状态,这个状态是除了进程0以外的所有进程的最初状态)、僵死状态(进程调用exit结束,进程不再存在,但在进程表项中仍有记录,该记录可由父进程收集)。

下面我们来以一个进程从创建到消亡的过程讲解Linux进程状态转换的“生死因果”。

(1)进程被父进程通过系统调用fork创建而处于创建态;(2)fork调用为子进程配置好内核数据结构和子进程私有数据结构后,子进程进入就绪态(或者在内存中就绪,或者因为内存不够而在SWAP设备中就绪);(3)若进程在内存中就绪,进程可以被内核调度程序调度到CPU运行;(4)内核调度该进程进入内核状态,再由内核状态返回用户状态执行。

该进程在用户状态运行一定时间后,又会被调度程序所调度而进入内核状态,由此转入就绪态。

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

一、开发平台搭建1.引言Linux操作系统在服务器领域的应用和普及已经有较长的历史,这源于它的开源特点以及其超越Windows的安全性和稳定性。

而近年来,Linux操作系统在嵌入式系统领域的延伸也可谓是如日中天,许多版本的嵌入式Linux系统被开发出来,如ucLinux、RTLinux、ARM-Linux等等。

在嵌入式操作系统方面,Linux的地位是不容怀疑的,它开源、它包含TCP/IP协议栈、它易集成GUI。

鉴于Linux操作系统在服务器和嵌入式系统领域愈来愈广泛的应用,社会上越来越需要基于Linux操作系统进行编程的开发人员。

浏览许多论坛,经常碰到这样的提问:“现在是不是很流行unix/linux下的c编程?所以想学习一下!但是不知道该从何学起,如何下手!有什么好的建议吗?各位高手!哪些书籍比较合适初学者?在深入浅出的过程中应该看哪些不同层次的书?比如好的网站、论坛请大家赐教!不慎感激!”鉴于读者的需求,在本文中,笔者将对Linux平台下C编程的几个方面进行实例讲解,并力求回答读者们关心的问题,以与读者朋友们进行交流,共同提高。

在本文的连载过程中,有任何问题或建议,您可以给笔者发送email:21cnbao@,您也可以进入笔者的博客参与讨论:/21cnbao。

笔者建议在PC内存足够大的情况下,不要直接安装Linux操作系统,最好把它安装在运行VMWare 虚拟机软件的Windows平台上,如下图:在Linux平台下,可用任意一个文本编辑工具编辑源代码,但笔者建议使用emacs软件,它具备语法高亮、版本控制等附带功能,如下图:2.GCC编译器GCC是Linux平台下最重要的开发工具,它是GNU的C和C++编译器,其基本用法为:gcc [options] [filenames]options为编译选项,GCC总共提供的编译选项超过100个,但只有少数几个会被频繁使用,我们仅对几个常用选项进行介绍。

假设我们编译一输出“Hello World”的程序:/* Filename:helloworld.c */main(){printf("Hello World\n");}最简单的编译方法是不指定任何编译选项:gcc helloworld.c它会为目标程序生成默认的文件名a.out,我们可用-o编译选项来为将产生的可执行文件指定一个文件名来代替a.out。

例如,将上述名为helloworld.c的C程序编译为名叫helloworld的可执行文件,需要输入如下命令:gcc –o helloworld helloworld.c-c选项告诉GCC仅把源代码编译为目标代码而跳过汇编和连接的步骤;-S 编译选项告诉GCC 在为C代码产生了汇编语言文件后停止编译。

GCC 产生的汇编语言文件的缺省扩展名是.s,上述程序运行如下命令:gcc –S helloworld.c将生成helloworld.c的汇编代码,使用的是AT&T汇编。

用emacs打开汇编代码如下图:-E选项指示编译器仅对输入文件进行预处理。

当这个选项被使用时,预处理器的输出被送到标准输出(默认为屏幕)而不是储存在文件里。

-O选项告诉GCC对源代码进行基本优化从而使得程序执行地更快;而-O2选项告诉GCC产生尽可能小和尽可能快的代码。

使用-O2选项编译的速度比使用-O时慢,但产生的代码执行速度会更快。

-g选项告诉GCC产生能被GNU调试器使用的调试信息以便调试你的程序,可喜的是,在GCC里,我们能联用-g和-O (产生优化代码)。

-pg选项告诉GCC在你的程序里加入额外的代码,执行时,产生gprof用的剖析信息以显示你的程序的耗时情况。

3.GDB调试器GCC用于编译程序,而Linux的另一个GNU工具gdb则用于调试程序。

gdb是一个用来调试C和C++程序的强力调试器,我们能通过它进行一系列调试工作,包括设置断点、观查变量、单步等。

其最常用的命令如下:file:装入想要调试的可执行文件。

kill:终止正在调试的程序。

list:列表显示源代码。

next:执行一行源代码但不进入函数内部。

step:执行一行源代码而且进入函数内部。

run:执行当前被调试的程序quit:终止gdbwatch:监视一个变量的值break:在代码里设置断点,程序执行到这里时挂起make:不退出gdb而重新产生可执行文件shell:不离开gdb而执行shell下面我们来演示怎样用GDB来调试一个求0+1+2+3+…+99的程序:/* Filename:sum.c */main(){int i, sum;sum = 0;for (i = 0; i < 100; i++){sum + = i;}printf("the sum of 1+2+...+ is %d", sum);}执行如下命令编译sum.c(加-g选项产生debug信息):gcc –g –o sum sum.c在命令行上键入gdb sum并按回车键就可以开始调试sum了,再运行run命令执行sum,屏幕上将看到如下内容:list命令:list命令用于列出源代码,对上述程序两次运行list,将出现如下画面(源代码被标行号):根据列出的源程序,如果我们将断点设置在第5行,只需在gdb 命令行提示符下键入如下命令设置断点:(gdb) break 5,执行情况如下图:这个时候我们再run,程序会停止在第5行,如下图:设置断点的另一种语法是break <function>,它在进入指定函数(function)时停住。

相反的,clear用于清除所有的已定义的断点,clear <function>清除设置在函数上的断点,clear<linenum>则清除设置在指定行上的断点。

watch命令:watch命令用于观查变量或表达式的值,我们观查sum变量只需要运行watch sum:watch <expr>为表达式(变量)expr设置一个观察点,一量表达式值有变化时,程序会停止执行。

要观查当前设置的watch,可以使用info watchpoints命令。

next、step命令:next、step用于单步执行,在执行的过程中,被watch变量的变化情况将实时呈现(分别显示Old value 和New value),如下图:next、step命令的区别在于step遇到函数调用,会跳转到到该函数定义的开始行去执行,而next 则不进入到函数内部,它把函数调用语句当作一条普通语句执行。

4.Makemake是所有想在Linux系统上编程的用户必须掌握的工具,对于任何稍具规模的程序,我们都会使用到make,几乎可以说不使用make的程序不具备任何实用价值。

在此,我们有必要解释编译和连接的区别。

编译器使用源码文件来产生某种形式的目标文件(object files),在编译过程中,外部的符号参考并没有被解释或替换(即外部全局变量和函数并没有被找到)。

因此,在编译阶段所报的错误一般都是语法错误。

而连接器则用于连接目标文件和程序包,生成一个可执行程序。

在连接阶段,一个目标文件中对别的文件中的符号的参考被解释,如果有符号不能找到,会报告连接错误。

编译和连接的一般步骤是:第一阶段把源文件一个一个的编译成目标文件,第二阶段把所有的目标文件加上需要的程序包连接成一个可执行文件。

这样的过程很痛苦,我们需要使用大量的gcc命令。

而make则使我们从大量源文件的编译和连接工作中解放出来,综合为一步完成。

GNU Make的主要工作是读进一个文本文件,称为makefile。

这个文件记录了哪些文件(目的文件,目的文件不一定是最后的可执行程序,它可以是任何一种文件)由哪些文件(依靠文件)产生,用什么命令来产生。

Make依靠此makefile中的信息检查磁盘上的文件,如果目的文件的创建或修改时间比它的一个依靠文件旧的话,make就执行相应的命令,以便更新目的文件。

假设我们写下如下的三个文件,add.h用于声明add函数,add.c提供两个整数相加的函数体,而main.c 中调用add函数:/* filename:add.h */extern int add(int i, int j);/* filename:add.c */int add(int i, int j){return i + j;}/* filename:main.c */#include "add.h"main(){int a, b;a = 2;b = 3;printf("the sum of a+b is %d", add(a + b));}怎样为上述三个文件产生makefile呢?如下:test : main.o add.ogcc main.o add.o -o testmain.o : main.c add.hgcc -c main.c -o main.oadd.o : add.c add.hgcc -c add.c -o add.o上述makefile利用add.c和add.h文件执行gcc -c add.c -o add.o命令产生add.o目标代码,利用main.c和add.h文件执行gcc -c main.c -o main.o命令产生main.o目标代码,最后利用main.o和add.o 文件(两个模块的目标代码)执行gcc main.o add.o -o test命令产生可执行文件test。

我们可在makefile中加入变量,另外。

环境变量在make过程中也被解释成make的变量。

这些变量是大小写敏感的,一般使用大写字母。

Make变量可以做很多事情,例如:i) 存储一个文件名列表;ii) 存储可执行文件名;iii) 存储编译器选项。

要定义一个变量,只需要在一行的开始写下这个变量的名字,后面跟一个=号,再跟变量的值。

引用变量的方法是写一个$符号,后面跟(变量名)。

我们把前面的makefile 利用变量重写一遍(并假设使用-Wall -O –g编译选项):OBJS = main.o add.oCC = gccCFLAGS = -Wall -O -gtest : $(OBJS)$(CC) $(OBJS) -o testmain.o : main.c add.h$(CC) $(CFLAGS) -c main.c -o main.oadd.o : add.c add.h$(CC) $(CFLAGS) -c add.c -o add.omakefile 中还可定义清除(clean)目标,可用来清除编译过程中产生的中间文件,例如在上述makefile 文件中添加下列代码:clean:rm -f *.o运行make clean时,将执行rm -f *.o命令,删除所有编译过程中产生的中间文件。

相关文档
最新文档