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 实验。创建如下的目录结构:

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

用 vim 编辑顶层 Makefile

用 vim 编辑各个目录下 Makefile

 

1、创建目录

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

 

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


f1.c的代码如下:

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

 

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

F2.c的代码如下:

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


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


Main.c的代码如下:

#include <stdio.h>
int main()
{
    print1();
    print2();
    return 0;
}


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

Myinclude.h下的代码:

#include <stdio.h>

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

 

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

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 $@


Obj中makefile代码:

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

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


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)

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


然后在makefiltest中创建目录 source/rootfs/app


输入make,将会出现以下结果:


之后输入tree,将会出现myapp

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

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

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

空城机

有钱捧个钱场,没钱捧个人场

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值