Linux虚拟机下makefile的编写应用

目的:

1. 熟悉嵌入式 Linux 开发基本过程及基本命令。

2. 了解嵌入式 Linux 开发中各种工具的基本用途。

3. 搭建好嵌入式 Linux 的开发环境。

4. 通过对包含多文件的 Makefile 的编写,熟悉各种形式的Makefile 编写,加深对 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 的变量

为了简化编辑和维护 Makefile,make 允许在 Makefile 中创建和使用变量。变量是在 Makefile 中定义的名字,用来代替一个文本字符串,该文本字符串称为该变量的值。在具体要求下,这些值可以代替目标体、依赖文件、命令以及 makefile 文件中的其它部分。在 Makefile中的变量定义有两种方式:递归展开方式和简单方式。

实验方法、步骤

1.嵌套 Makefile 实验。创建如下的目录结构:

Linux虚拟机下makefile的编写应用_第1张图片

用 vim 编辑各个目录下的相关文件。

用 vim 编辑顶层 Makefile

用 vim 编辑各个目录下 Makefile

 

1、创建目录

首先在用户目录下创建 makefiletest 文件夹;创建好需用到的其它文件夹f1,f2,main,obj,include等5个文件夹。

Linux虚拟机下makefile的编写应用_第2张图片

 

2、在f1文件夹下使用vim创建f1.c文件。


f1.c的代码如下:

#include "../include/myinclude.h"
void print1()
{
printf("Message from f1.c...\n");
return;
}

Linux虚拟机下makefile的编写应用_第3张图片

 

3、在f2文件夹下使用vim创建f2.c文件。

F2.c的代码如下:

#include "../include/myinclude.h"
void print2()
{
printf("Message from f2.c...\n");
return;
}

Linux虚拟机下makefile的编写应用_第4张图片


4、在main文件夹下使用vim创建main.c文件。


Main.c的代码如下:

#include 
int main()
{
    print1();
    print2();
    return 0;
}

Linux虚拟机下makefile的编写应用_第5张图片


5、在include文件夹下使用vim创建myinclude.h文件

Myinclude.h下的代码:

#include 

现在的myfiltest文件夹下的情况为:

 

6、在f1文件夹下使用vim创建Makefile文件。

Linux虚拟机下makefile的编写应用_第6张图片

makefile代码如下:

../$(OBJS_DIR)/f1.o: f1.c
$(CC) -c $^ -o $@

 

7、在f2文件夹下创建Makefile文件。

Makefile代码如下:

../$(OBJS_DIR)/f2.o: f2.c
$(CC) -c $^ -o $@

 

8、在main和obj文件夹下进行如上操作
Main中makefile代码:

../$(OBJS_DIR)/main.o: main.c
$(CC) -c $^ -o $@

Linux虚拟机下makefile的编写应用_第7张图片

Linux虚拟机下makefile的编写应用_第8张图片
Obj中makefile代码:

../$(BIN_DIR)/$(BIN) : $(OBJS)
$(CC) -o $@ $^

Linux虚拟机下makefile的编写应用_第9张图片

现在的情况为(使用tree命令):

Linux虚拟机下makefile的编写应用_第10张图片


9、代码如下:然后在makefiltest主文件夹下创建Makefile文件

CC = gcc
SUBDIRS = f1 \
     f2 \
     main \
     obj
OBJS = f1.o f2.o main.o 
BIN = myapp
OBJS_DIR = obj
BIN_DIR = bin
export CC OBJS BIN OBJS_DIR BIN_DIR

all : CHECK_DIR $(SUBDIRS)
    cp bin/myapp /source/rootfs/app
CHECK_DIR :
    mkdir -p $(BIN_DIR)
$(SUBDIRS) : ECHO
    make -C $@
ECHO:
    @echo $(SUBDIRS)
    @echo begin compile
CLEAN :
    @$(RM) $(OBJS_DIR)/*.o
    @rm -rf $(BIN_DIR)

Linux虚拟机下makefile的编写应用_第11张图片

10、输入make去运行makefile文件,发现错误cp无法创建普通文件

Linux虚拟机下makefile的编写应用_第12张图片
然后在makefiltest中创建目录 source/rootfs/app

Linux虚拟机下makefile的编写应用_第13张图片
输入make,将会出现以下结果:

Linux虚拟机下makefile的编写应用_第14张图片
之后输入tree,将会出现myapp

Linux虚拟机下makefile的编写应用_第15张图片

11、在bin目录下使用./myapp,将会将二进制文件运行输出f1.c和f2.c的printf结果

Linux虚拟机下makefile的编写应用_第16张图片

一起学习,一起进步 -.- ,如有错误,可以发评论 

你可能感兴趣的:(Linux虚拟机下makefile的编写应用)