GUN开发坏境基础之Makefile

gun的make程序,gun的make官网:

make的作用:工程文件组织,编译成复杂的程序,安装和卸载程序。
GUN开发坏境基础之Makefile_第1张图片

make的编写及makefile变量
GUN开发坏境基础之Makefile_第2张图片
1,简单的makefile例子:在目录下创建4个文件func1.c,func2.c,main.c,makefile

func1.c内容
GUN开发坏境基础之Makefile_第3张图片

func2.c内容
GUN开发坏境基础之Makefile_第4张图片
main.c内容
GUN开发坏境基础之Makefile_第5张图片

makefile的内容

2,对以上例子进行改进,添加多条规则,如下:
1)生成目标文件func1.o,func2.o,main.o, 再生成执行文件main。
以及添加伪目标clean,install,uninstall规则。
修改makefile内容如下:
GUN开发坏境基础之Makefile_第6张图片
2)运行make
GUN开发坏境基础之Makefile_第7张图片
3)运行make clean

4)运行安装命令make install
GUN开发坏境基础之Makefile_第8张图片

5)运行卸载命令make uninstall
GUN开发坏境基础之Makefile_第9张图片
3,用户自定义变量
例如:基于以上的makefile进行修改,添加用户自定义变量MYOBJ(任意)将语句main.o func1.o func2.o赋值给MYOBJ,用符引用用户自定义变量(MYBOJ);然后用$(MYBOJ)替代语句中的main.o func1.o func2.o。
MYOBJ = main.o func1.o func2.o ;如下图
GUN开发坏境基础之Makefile_第10张图片
GUN开发坏境基础之Makefile_第11张图片
make成功
4,预定义变量(即系统自带的一些变量)
GUN开发坏境基础之Makefile_第12张图片
例如基于以上makefile:添加CFLAGS = -g -s; CC = gcc;//好处为可以通过修改CC的值来选择编译器,如CC = g++;
GUN开发坏境基础之Makefile_第13张图片

5,自动变量及坏境变量
GUN开发坏境基础之Makefile_第14张图片
例如将以上makefile修改;用S^S@所有依赖目标文件和目标文件。
GUN开发坏境基础之Makefile_第15张图片

make的工作流程

 

执行没找到根据时间截生成目标文件找到make当前目录下的makefile文件是否找到makefile?创建makefile文件将文件中的第一个目标文件target最为最终目标文件递归去寻找目标文件的依赖文件并递归生成这些依赖文件

makefile的规则
1,显式规则(以上的操作)
2,隐式规则
例如:
OBJ = main.o func1.o func2.o
CC = gcc
CFFLAGS = -g -c
main:$(OBJ) //将依赖文件全隐藏于OBJ里
$(CC) S^ -o S@

makefile的伪目标:如以上的clean,install,uninstall等没有依赖文件的目标。
.PHONY: clean
.PHONY:install
.PHONY:uninstall

[注].PHONY用于声明伪目标

引用其他makefile及makefile嵌套
包含:
include proc/makefile

嵌套:
subsystem;
cd subdir && gcc -c main.c//进入子文件夹并gcc编译
等价于:
subsystem;
gcc -c main.c -C subdir

makefile中的条件判断

例子:基于以上makefile文件
在makefile文件中添加判断语句,语句要向左顶格写,不能空格;
ifeq()
....
else
....
endif
如下图:

GUN开发坏境基础之Makefile_第16张图片

makefile管理命令
GUN开发坏境基础之Makefile_第17张图片

make -C makefile //退回makefile所在目录的上一级目录,然后执行该目录的makefile文件
如下图操作:

GUN开发坏境基础之Makefile_第18张图片
将makefile改名为xxx.mk文件,再用make clean -f xxx.mk === make clean

make =====>make -f xxx.mk
例如:
make clean -f haha.mk

GUN开发坏境基础之Makefile_第19张图片
makefile如何编写?
1,源文件或依赖文件很多怎么办?
makefile分开多文件或者分级
2,output不仅仅一个文件怎么办?
1)用多个makefile文件,相互include,嵌套
2)使用伪目标make all

GUN开发坏境基础之Makefile_第20张图片

你可能感兴趣的:(linux嵌入式开发环境搭建,Linux嵌入式,Makefile,Makefile)