实验四:Makefile 实验

合集下载

Makefile编程实验

Makefile编程实验

实验四:Makefile编程实验实验目的:1.学会Makefile基本规则;2.学会make命令的使用方法;3.学会使用Makefile程序的编写。

实验设备:PC机。

实验原理:Makefile是用于自动编译和链接的,一个工程有很多文件组成,每一个文件的改变都会导致工程的重新链接,但是不是所有的文件都需要重新编译,Makefile中纪录有文件的信息,在make时会决定在链接的时候需要重新编译哪些文件。

实验方法:1.编写包含多文件的Makefile(1)用vi在/home/vi目录下编辑hello.c程序,程序内容如下所示:#include“hello.h”int main(){printf(“Hello everyone!\n”);return0;}(2)用vi在同一目录下编辑hello.h程序,程序内容如下所示:#include<stdio.h>(3)在shell命令行中用gcc尝试编译,使用命令:“gcc hello.c-o hello”,并运行hello可执行文件查看结果;(4)删除此次编译的可执行文件:rm hello;(5)用vi在同一目录下编辑Makefile,内容如下所示:hello:hello.c hello.hgcc hello.c-o hello(6)退出保存,在shell中键入:make,查看结果;(7)再次用vi打开Makefile,用变量进行替换,如下所示:OBJS:=hello.oCC:=gcchello:$(OBJS)$(CC)$^-o$@(8)退出保存,在shell中键入make,查看结果;(9)用vi在同一目录下编辑makefile1,内容如下所示:hello:hello.ogcc hello.o-o hellohello.o:hello.c hello.hgcc-c hello.c-o hello.o(10)退出保存,在shell中键入:make-f makefile1,查看结果;(11)再次用vi编辑makefile1,内容如下所示:OBJS1:=hello.oOBJS2:=hello.c hello.hCC:=gcchello:$(OBJS1)$(CC)$^-o$@$(OBJS1):$(OBJS2)$(CC)-c$<-o$@在这里请注意区别“$^”和“$<”;(12)退出保存,在shell中键入:make-f makefile1,查看结果;2.使用autotools生成包含多文件的Makefile(1)在/home/vi目录下新建文件夹auto:#mkdir./auto(2)将/home/vi目录下的hello.c和hello.h文件复制到/home/vi/auto 目录下,然后进入到/home/vi/auto目录里面:#cp/home/vi/hello.*/home/vi/auto#cd/home/vi/auto(3)执行命令:#autoscan(4)使用vi编辑当前目录下的configure.scan文件为,主要是蓝色部分:#-*-Autoconf-*-#Process this file with autoconf to produce a configure script.AC_PREREQ(2.59)AC_INIT(hello, 1.0)AM_INIT_AUTOMAKE(hello,1.0)AC_CONFIG_SRCDIR([hello.h])AC_CONFIG_HEADER([config.h])#Checks for programs.AC_PROG_CC#Checks for libraries.#Checks for header files.#Checks for typedefs,structures,and compiler characteristics.#Checks for library functions.AC_OUTPUT(makefile)(5)保存退出,并重命名为configure.in;(6)执行命令:#aclocal(7)执行命令:#autoconf并用ls或ll命令查看是否生成了configure可执行文件;(8)执行命令:#autoheader(9)在当前目录下用vi创建makefile.am文件为:AUTOMAKE_OPTIONS=foreignbin_PROGRAMS=hellohello_SOURCES=hello.c hello.h(10)执行命令:#automake然后再执行下面的命令:#automake-a(11)执行命令:#./configure(12)执行命令:#make(13)执行命令:#./hello查看结果是否正确;(14)执行命令:#Make install(15)执行命令:#hello查看结果是否正确;(16)执行命令:#make dist(17)在当前目录下解压文件hello-1.0.tar.gz:#tar-zxvf hello-1.0.tar.gz(18)进入解压目录:#cd./hello-1.0(19)下面开始Linux下常见的安装软件步骤:#./configure(20)执行命令:#make(21)执行命令:#./hello注意:在正常安装时这一步可省略;(22)执行命令:#make install(23)执行命令:#hello查看结果是否正确。

Makefile两个实验

Makefile两个实验

实验十四Makefile工程管理器14.1 编写包含多文件的Makefile【实验内容】编写一个包含多文件的Makefile。

【实验目的】通过对包含多文件的Makefile的编写,熟悉各种形式的Makefile,并且进一步加深对Makefile中用户自定义变量、自动变量及预定义变量的理解。

【实验平台】PC机、CentOS 5 操作系统、gcc等工具。

【实验步骤】1.用vi在同一目录下编辑两个简单的Hello程序,如下所示:#hello.c#include "hello.h"int main(){printf("Hello everyone!\n");}#hello.h#include <stdio.h>2.仍在同一目录下用vim编辑Makefile,不使用变量替换,用一个目标体实现(即直接将hello.c和hello.h编译成hello目标体)。

并用make验证所编写的Makefile是否正确。

3.将上述Makefile使用变量替换实现。

同样用make验证所编写的Makefile是否正确4.用编辑另一Makefile,取名为Makefile1,不使用变量替换,但用两个目标体实现(也就是首先将hello.c和hello.h编译为hello.o,再将hello.o编译为hello),再用make 的‘-f’选项验证这个Makefile1的正确性。

5.将上述Makefile1使用变量替换实现【详细步骤】1.用vi打开上述两个代码文件‘hello.c’和‘hello.h’2.在shell命令行中用gcc尝试编译,使用命令:‘gcc hello.c -o hello’,并运行hello可执行文件查看结果。

3.删除此次编译的可执行文件:rm –rf hello4.用vim编辑Makefile,如下所示:hello:hello.c hello.hgcc hello.c -o hello5.退出保存,在shell中键入:make查看结果6.再次用vim打开Makefile,用变量进行替换,如下所示:OBJS :=hello.oCC :=gcchello:$(OBJS)$(CC) $^ -o $@7.退出保存,在shell中键入:make查看结果8.用vim编辑Makefile1,如下所示:hello:hello.ogcc hello.o -o hellohello.o:hello.c hello.hgcc -c hello.c -o hello.o9.退出保存,在shell中键入:make –f Makefile1查看结果10.再次用vi编辑Makefile1,如下所示:OBJS1 :=hello.oOBJS2 :=hello.c hello.hCC :=gcchello:$(OBJS1)$(CC) $^ -o $@$(OBJS1):$(OBJS2)$(CC) -c $< -o $@在这里请注意区别‘$^’和‘$<’。

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就像一个shell脚本一样,其中也可以执行操作系统命令。

而make 只是一个命令工具,是一个解释makefile中的指令的命令工具,一般来说IDE即集成开发环境都有这个命令。

Makefile 的环境:我是在linux下进行的实验linux 系列下,我用的是ubuntu ,当然你可以用redhat 红旗后其他,我想都没有什么问题的。

在做实验的时候我会做一些linux写的c/c++例子来演示,以加深理解。

关于程序的编译和链接:一般来说,c或者是c++,首先把源文件(*.c 或*.cpp)编译成为中间代码文件,这个中间代码文件在windows下是*.obj文件在linux 或unix 是*.o文件即object file 目标文件这个动作就叫做编译,即把源文件编译成目标文件的过程就叫做编译(compile)。

这以后,再把大量的*.obj 或*.o 目标文件合成一个可以执行的文件,这个工程就叫做链接link。

编译时,主要是检查程序的语法是否正确,函数,变量是否都有声明。

至于链接呢,主要是链接函数,和全局变量。

一.M akefile 的规则Target:prerequisitesCommand。

Target就是一个目标文件,可以使obj或是可执行文件还可以是一个标签label,关于标签label会在下面的文目标中讲解。

所以我们现在只关注obj 和可执行文件即可,其实大部分还都是obj文件,或许可执行文件就只有一个。

Prerequisites 是先决条件的意识,其实在这里只是依赖的意思,prerequisites在这里是生成target的所需要的文件或目标。

linux内核编译和生成makefile文件实验报告

linux内核编译和生成makefile文件实验报告

操作系统实验‎报告姓名:学号:一、实验题目1.编译linu‎x内核2.使用auto‎conf和a‎u tomak‎e工具为pr‎o ject工‎程自动生成M‎a kefil‎e,并测试3.在内核中添加‎一个模块二、实验目的1.了解一些命令‎提示符,也里了解一些‎l inux系‎统的操作。

2.练习使用au‎t oconf‎和autom‎a ke工具自‎动生成Mak‎e file,使同学们了解‎M a kefi‎l e的生成原‎理,熟悉linu‎x编程开发环‎境三、实验要求1使用静态库‎编译链接sw‎a p.c,同时使用动态‎库编译链接m‎y add.c。

可运行程序生‎成在src/main目录‎下。

2要求独立完‎成,按时提交四、设计思路和流‎程图(如:包括主要数据‎结构及其说明‎、测试数据的设‎计及测试结果‎分析)1.Makefi‎l e的流程图‎:2.内核的编译基‎本操作1.在ubunt‎u环境下获取‎内核源码2.解压内核源码‎用命令符:tar xvf linux-3.18.12.tar.xz3.配置内核特性‎:m ake allnoc‎o nfig4.编译内核:make5.安装内核:make instal‎l6.测试:cat/boot/grub/grub.conf7.重启系统:sudo reboot‎,看是否成功的‎安装上了内核‎8.详情及结构见‎附录3.生成make‎f ile文件‎:1.用老师给的p‎rojec里‎的m ain.c函数。

2.需要使用au‎t omake‎和autoc‎o nf两个工‎具,所以用命令符‎:sudo apt-get instal‎l autoco‎n f 进行安装‎。

3.进入主函数所‎在目录执行命‎令:autosc‎a n,这时会在目录‎下生成两个文‎件a utosc‎a n.log和co‎n figur‎e.scan,将confi‎g ure.Scan改名‎为confi‎g ure.ac,同时用ged‎i t打开,打开后文件修‎改后的如下:# -*- Autoco‎n f -*-# Proces‎s this file with autoco‎n f to produc‎e a config‎u re script‎.AC_PRE‎R EQ([2.69])AC_INI‎T([FULL-PACKAG‎E-NAME], [VERSIO‎N], [BUG-REPORT‎-ADDRES‎S])AC_CON‎F IG_SR‎C DIR([main.c])AC_CON‎F IG_HE‎A DERS([config‎.h])AM_INI‎T_AUTO‎M AKE(main,1.0)# Checks‎for progra‎m s.AC_PRO‎G_CC# Checks‎for librar‎i es.# Checks‎for header‎files.# Checks‎for typede‎f s, struct‎u res, and compil‎e r charac‎t erist‎i cs.# Checks‎for librar‎y functi‎o ns.AC_OUT‎P UT(Makefi‎l e)4.新建Make‎fi le文件‎,如下:AUTOMA‎K E_OPT‎I ONS=foreig‎nbin_PR‎O GRAMS‎=mainfirst_‎S OURCE‎S=main.c5.运行命令ac‎l ocal命令成功之后‎,在目录下会产‎生acloc‎a l.m4和aut‎o m4te.cache两‎个文件。

makefile工具的使用实验原理

makefile工具的使用实验原理

makefile工具的使用实验原理一、Makefile工具概述Makefile是一种自动化编译工具,用于管理程序的编译和链接过程。

它可以根据程序的依赖关系,自动判断哪些文件需要重新编译,从而提高程序的编译效率。

二、Makefile工具的基本语法Makefile文件由一系列规则组成,每个规则包含一个目标、依赖关系和命令。

其中,目标指的是要生成的文件,依赖关系指的是生成该文件所需要依赖的其他文件或目标,命令指的是生成该目标文件所需要执行的命令。

三、Makefile工具中变量和函数在Makefile中可以定义变量和函数来简化代码和提高可维护性。

变量可以用来存储常量或计算结果,函数可以用来处理字符串等操作。

四、Makefile工具中常见命令1. 编译命令:gcc -c source.c -o object.o2. 链接命令:gcc object.o -o target3. 清除命令:rm -f target object.o五、Makefile工具实验步骤1. 创建源代码文件和头文件。

2. 创建Makefile文件,并定义变量和函数。

3. 定义规则,并设置目标、依赖关系和命令。

4. 执行make命令进行编译链接。

5. 执行make clean命令清除生成的目标文件。

六、Makefile工具实验注意事项1. Makefile文件中的变量和函数必须使用$符号进行引用。

2. 目标文件和依赖关系之间必须使用冒号分隔符。

3. 命令必须以Tab键开头,否则会报错。

4. Makefile文件中的注释可以使用#符号。

七、Makefile工具实验示例以下是一个简单的Makefile示例,用于编译一个C语言程序:```# 定义变量CC = gccCFLAGS = -Wall -g# 定义规则target: main.o func.o$(CC) main.o func.o -o targetmain.o: main.c func.h$(CC) $(CFLAGS) -c main.cfunc.o: func.c func.h$(CC) $(CFLAGS) -c func.cclean:rm -f target *.o```在该示例中,定义了两个变量CC和CFLAGS,分别表示编译器和编译选项。

实验八 makefile

实验八 makefile

实验四Makefile一、实验目的1、了解和掌握makefile文件的编写;2、学会使用交叉编译工具和make工具。

二、实验环境预装Fedora10的pc机一台,CVT-A8系列实验箱,以太网线一根,串口线一根。

三、实验步骤1、连接主机和目标板;(三根线,注意网线和串口线是否连接正常)2、Makefile文件的编写a) 编写一个文件prime.h,包含一个判断unsigned int是否为素数的函数定义。

b) 编写一个文件prime.c,实现上面的那个函数。

c) 编写一个文件main.c,实现用户输入整数,程序告诉用户这个数是否为素数,直到用户输入0结束。

d) 使用gcc编译,查看运行结果。

e) 编写makefile文件实现第d步的功能,并使用make工具编译生成这个可执行文件;运行。

f) 使用定义宏来改写makefile,实现第d步的功能,并使用make工具编译生成这个可执行文件;运行。

g) 使用对依赖文件的预定义变量改写makefile,实现第d 步的功能,并使用make工具编译生成这个可执行文件;运行。

h) 使用标签改写makefile,此标签功能为删除项目编译生成中的所有中间文件,并使用make工具删除项目编译生成中的所有中间文件。

i) 使用CC宏指代编译器命令gcc,修改makefile文件,实现第d步的功能,并使用make工具编译生成这个可执行文件;运行。

j) 使用CC宏指代编译器命令arm-linux-gcc,修改makefile 文件,实现第d步的功能,并使用make工具编译生成这个可执行文件;下载到目标板运行。

k) 使用make CC=gcc 命令生成可执行文件,使用file查看可执行文件信息。

再查看makefile文件。

四、实验要求1、要求随时观察记录实验结果;2、保留编写的源文件和每一步的makefile;3、掌握makefile文件的三种编写方法。

五、实验报告要求1、每人一份实验报告;2、实验报告中要求对每一步操作和出现的结果详细记录并解释;3、你认为做好本实验应该注意哪些方面?六、思考题makefile文件的作用?。

嵌入式编程基础实验报告之Makefile文件的使用

嵌入式编程基础实验报告之Makefile文件的使用

实验内容与分析设计:(1)用Vi打开上述两个代码文件“hello.c”和“hello.h”。

(2)在shell命令行中用Gcc尝试编译,使用命令:”Gcc hello.c –o hello”,并运行hello可执行文件查看结果。

(3)删除此次编译的可执行文件:rm hello。

(4)用Vi编辑Makefile,如下所示:hello:hello.c hello.hGcc hello.c -o hello(5)退出保存,在shell中键入:make,查看结果。

(6)再次用Vi打开Makefile,用变量进行替换,如下所示:OBJS :=hello.oCC :=Gcchello:$(OBJS)$(CC) $^ -o $@(7)退出保存,在shell中键入:make,查看结果。

(8)用Vi编辑Makefile1,如下所示:hello:hello.oGcc hello.o -o hellohello.o:hello.c hello.hGcc -c hello.c -o hello.o(9)退出保存,在shell中键入:make -f Makefile1,查看结果。

(10)再次用Vi编辑Makefile1,如下所示:OBJS1 :=hello.oOBJS2 :=hello.c hello.hCC :=Gcchello:$(OBJS1)$(CC) $^ -o $@$(OBJS1):$(OBJS2)$(CC) -c $< -o $@在这里请注意区别“$^”和“$<”。

退出保存,在shell中键入:make -f Makefile1,查看结果实验结果:各种不同形式的makefile都能完成其正确的功能疑难与小节:通过对包含多文件的Makefile的编写,熟悉各种形式的Makefile,并且进一步加深对Makefile 中用户自定义变量、自动变量及预定义变量的理解主要算法和程序清单:#hello.c#include "hello.h"int main(){printf("Hello everyone!\n"); }#hello.h#include <stdio.h> Makefile:hello:hello.c hello.hGcc hello.c -o hello Makefile:OBJS :=hello.oCC :=Gcchello:$(OBJS)$(CC) $^ -o $@Makefile1:hello:hello.oGcc hello.o -o hello hello.o:hello.c hello.hGcc -c hello.c -o hello.o Makefile1:OBJS1 :=hello.oOBJS2 :=hello.c hello.hCC :=Gcchello:$(OBJS1)$(CC) $^ -o $@ $(OBJS1):$(OBJS2)$(CC) -c $< -o $@。

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

实验四:Makefile 实验
一、实验目的:
1、了解make;
2、了解makefile;
3、掌握makefile 编程;
二、实验内容:
通过makefile 来编译程序
三、实验设备:
PC 机、飞凌6410 开发板
四、实验原理:
1、MAKE
当运行make 命令时,make 命令会在当前目录下按顺序寻找文件名为“GUNmakefile”、“Makefile”、“makefile”的文件,找到后解释这些文件。

所以说make是一个解释makefile 中指令的命令工具。

Makefile 或makefile: 告诉make 维护一个大型程序,该做什么。

Makefile 说明了组成程序的各模块间的相互关系及更新模块时必须进行的动作,make 按照这些说明自动地维护这些模块。

简单的说makefile 就像批处理的脚本文件,里边写好了一些命令的集合,当运行make 命令时,便会按着makefile 提供的命令及顺序来完成编译。

Makefile 文件包含了五部分内容:显示规则、隐式规则、变量定义、文件指示和注释
2、Makeile 中的变量
Makefile 里的变量就像一个环境变量。

事实上,环境变量在make 中也被解释成make 的变量。

这些变量对大小写敏感,一般使用大写宇母。

几乎可以从任何地方引用定义的变量。

Makefile 中的变量是用一个文本串在Makefile 中定义的,这个文本串就是变量的值。

只要在一行的开始写下这个变量的名字,后面跟一个“=”号,以及要设定这个变量的值即可定义变量,下面是定义变量的语法:
VARNAME=string
使用时, 把变量用括号括起来, 并在前面加上$ 符号, 就可以引用变量的
值:${VARNAME}
3、Make 工作时的执行步骤
(1)读入所有的makefile 文件;
(2)读入被include 包括的其他makefile 文件;
(3)初始化文件中的变量;
(4)推到隐士规则,并分析所有规则;
(5)根据依赖关系,决定哪些目标要重新生成;
(6)执行生成命令;
第(1)~(5)步为第一个阶段,第(6)~(7)步为第二个阶段。

第一个阶段中,如果定义的变量被使用了,make 会在它使用的位置把它展开。

但make 并不会马
上完全展开,make 使用的是拖延战术。

如果变量出现在依赖关系的规则中,进当这条依赖关系决定要使用时,变量才会在其内部展开。

五、实验内容
1、敲代码code.c,code.h,prog.c,prog.h,prog.o,test.c 还有
makefile
2、编译及运行
上次课上学习了本机编译和交叉编译,这次的编译也分两种编译,但是由于makefile的存在,使得这两种的编译步骤几乎相同。

1、打开makefile,其中最上面的两行,决定了是使用本机还是交叉编译。

2、本机编译
3、交叉编译
4、开发板运行程序
六、实验心得
本实验实施过程比较简单,由于文件代码在实验指导书中都已经给出,也减少了许多工作量。

但是在实验代码的复制过程中未看清楚格式,导致格式不对,make时失败了好几次。

同时,根据这个实验,见识到了make功能的强大功能,可以方便地集合运行多个文件,
在大型程序中起着至关重要的作用。

相关文档
最新文档