实验一 嵌入式 Linux 开发环境的搭建及 Makefile 应用
一、实验目的:
1.熟悉嵌入式 Linux 开发基本过程及基本命令。
2.了解嵌入式 Linux 开发中各种工具的基本用途。
3.搭建好嵌入式 Linux 的开发环境。
4.通过对包含多文件的 Makefile 的编写,熟悉各种形式的
Makefile 编写,加深对 Makefile 中用户自定义变量、自动变量及预定
义变量的理解。
二、实验内容:
1.安装 Vmware Ubuntu
2.熟悉 Linux 下相关命令:属性查询、修改,路径、目录的查询、修改、删除,压缩、解压等;
3.熟悉编辑工具;
4.熟悉 makefile 文件的基本作用(编写一个包含多文件的
Makefile)。
三、Make 工程管理器:
Makefile如今能得以广泛应用,这还得归功于它被包含在Unix
统中。在make诞生之前,Unix系统的编译系统主要由“make”、
installshell脚本程序和程序的源代码组成。它可以把不同目标的
命令组成一个文件,而且可以抽象化依赖关系的检查和存档。这是
向现代编译环境发展的重要一步。1977年,斯图亚特·费尔德曼在
1

贝尔实验室里制作了这个软件。2003年,斯图亚特·费尔德曼因发
明了这样一个重要的工具而接受了美国计算机协会(ACM)颁发的
软件系统奖。
Makefile文件是可以实现自动化编译,只需要一个“make”命
令,整个工程就能完全自动编译,极大的提高了软件开发的效率。
目前虽有众多依赖关系检查工具,但是make是应用最广泛的一个。
一个程序员会不会写makefile,从一个侧面说明了这个程序员是否具
备完成大型工程的能力。
1.Makefile 基本规则
一个简单的 Makefile 语句由目标、依赖条件、指令组成。
smdk6400_config :    unconfig
@mkdir -p $(obj)include $(obj)board/samsung/smdk6400
其中:
smdk6400_config:目标;
unconfig:先决条件;
@mkdir -p $(obj)include $(obj)board/samsung/smdk6400:指令。
这里特别注意,“@”前面是 Tab 键,并且必须是 Tab 键,而
不能是空格。
目标和先决条件是依赖关系,目标是依赖于先决条件生成的。
2.Makefile 的变量
为了简化编辑和维护 Makefilemake 允许在 Makefile 中创建和
使用变量。变量是在 Makefile 中定义的名字,用来代替一个文本字符
串,该文本字符串称为该变量的值。在具体要求下,这些值可以代替
目标体、依赖文件、命令以及 makefile 文件中的其它部分。在 Makefile
中的变量定义有两种方式:递归展开方式和简单方式。
2

Makefile 中的变量分为用户自定义变量、预定义变量、自动变量
及环境变量。自定义变量的值由用户自行设定,而预定义变量和自动
变量为通常在 Makefile 都会出现的变量,其中部分有默认值,也就是
常见的设定值,当然用户可以对其进行修改。预定义变量包含了常见
变压器、汇编器的名称及其编译选项。表 1.1 列出了 Makefile 中常见
预定义变量及其部分默认值。
嵌入式linux开发书籍
1.1  Makefile 中常见的预定义变量
命令格式
含义
AR
库文件维护程序的名称,默认值为 ar
AS
汇编程序的名称,默认值为 as
CC
C 编译器的名称,默认值为 cc
CPP
C 预编译器的名称,默认值为$(CC) -E
CXX
C++编译器的名称,默认值为 g++
FC
FORTRAN 编译器的名称,默认值为 f77
RM
文件删除程序的名称,默认值为 rm -f
ARFLAGS
库文件维护程序的选项,无默认值
ASFLAGS
汇编程序的选项,无默认值
CFLAGS
C 编译器的选项,无默认值
CPPFLAGS
C 预编译器的选项,无默认值
CXXFLAGS
C++编译器的选项,无默认值
FFLAGS
FORTRAN 编译器的选项,无默认值
由于常见的 gcc 编译语句中通常包含了目标文件和依赖文件,而
这些文件在 Makefile 文件中目标体的一行已经有所体现,因此为进一
步简化 Makefile 的编写,就引入了自动变量。自动变量通常可以代表
编译语句中出现目标文件和依赖文件等,并且具有本地含义(即下一
语句中出现的相同变量代表的是下一语句的目标文件和依赖文件)。
1.2 列出了 Makefile 中常见的自动变量。
1.2 Makefile 中常见自动变量
命令格式
含义
$*
不包含扩展名的目标文件名称
$+
所有的依赖文件,以空格分开,并以出现的先后为序,可能
包含重复的依赖文件
3

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。