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文件。
#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文件。
#include
int main()
{
print1();
print2();
return 0;
}
5、在include文件夹下使用vim创建myinclude.h文件
Myinclude.h下的代码:
#include
现在的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 $@
../$(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
11、在bin目录下使用./myapp,将会将二进制文件运行输出f1.c和f2.c的printf结果
一起学习,一起进步 -.- ,如有错误,可以发评论