GUN开发坏境基础之Makefile

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

make的作用:工程文件组织,编译成复杂的程序,安装和卸载程序。

make的编写及makefile变量

1,简单的makefile例子:在目录下创建4个文件func1.c,func2.c,main.c,makefile

func1.c内容

func2.c内容

main.c内容

makefile的内容

2,对以上例子进行改进,添加多条规则,如下:
1)生成目标文件func1.o,func2.o,main.o, 再生成执行文件main。
以及添加伪目标clean,install,uninstall规则。
修改makefile内容如下:

2)运行make

3)运行make clean

4)运行安装命令make install

5)运行卸载命令make uninstall

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 ;如下图


make成功
4,预定义变量(即系统自带的一些变量)

例如基于以上makefile:添加CFLAGS = -g -s; CC = gcc;//好处为可以通过修改CC的值来选择编译器,如CC = g++;

5,自动变量及坏境变量

例如将以上makefile修改;用S^S@所有依赖目标文件和目标文件。

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
如下图:

makefile管理命令

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


将makefile改名为xxx.mk文件,再用make clean -f xxx.mk === make clean

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


makefile如何编写?
1,源文件或依赖文件很多怎么办?
makefile分开多文件或者分级
2,output不仅仅一个文件怎么办?
1)用多个makefile文件,相互include,嵌套
2)使用伪目标make all

发布了26 篇原创文章 · 获赞 11 · 访问量 594

猜你喜欢

转载自blog.csdn.net/weixin_38251305/article/details/103896807