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

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

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

func2.c内容
GUN开发坏境基础之Makefile
main.c内容
GUN开发坏境基础之Makefile

makefile的内容
GUN开发坏境基础之Makefile
2,对以上例子进行改进,添加多条规则,如下:
1)生成目标文件func1.o,func2.o,main.o, 再生成执行文件main。
以及添加伪目标clean,install,uninstall规则。
修改makefile内容如下:
GUN开发坏境基础之Makefile
2)运行make
GUN开发坏境基础之Makefile
3)运行make clean
GUN开发坏境基础之Makefile
4)运行安装命令make install
GUN开发坏境基础之Makefile

5)运行卸载命令make uninstall
GUN开发坏境基础之Makefile
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
GUN开发坏境基础之Makefile
make成功
4,预定义变量(即系统自带的一些变量)
GUN开发坏境基础之Makefile
例如基于以上makefile:添加CFLAGS = -g -s; CC = gcc;//好处为可以通过修改CC的值来选择编译器,如CC = g++;
GUN开发坏境基础之Makefile

5,自动变量及坏境变量
GUN开发坏境基础之Makefile
例如将以上makefile修改;用S^[email protected]所有依赖目标文件和目标文件。
GUN开发坏境基础之Makefile

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 [email protected]

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

makefile管理命令
GUN开发坏境基础之Makefile

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

GUN开发坏境基础之Makefile
将makefile改名为xxx.mk文件,再用make clean -f xxx.mk === make clean

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

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

GUN开发坏境基础之Makefile

相关文章:

  • 2022-12-23
  • 2022-01-04
  • 2021-12-12
  • 2021-10-18
  • 2021-06-03
  • 2021-05-21
猜你喜欢
  • 2021-08-18
  • 2021-12-14
  • 2021-06-01
  • 2021-05-21
  • 2021-08-10
相关资源
相似解决方案