自动项目编译工具make
make是一种用于自动编译项目的构建工具,通过执行makefile中预先写好的命令保证按照依赖关系、避免重复编译。Make在实际的工作中依然是使用gnu gcc的工具进行编译的,只是提前指定了gcc的命令。
Makefile的编写
1.基础语法
目标:依赖
命令
为了方便缩写和编译,可以使用定义的变量进行缩写,使用时加上()即可解析为命令进行。除此以外,存在一些简略的写法代替目标和依赖,^: 依赖、$@: 目标文件。
2.伪目标:
.PHONY:用于标识一个不对应实际文件的伪目标,这些伪目标往往用来控制makefile
例如clean。
3.例子:
CC=gcc
OBJS=hello.c
CFLAGS=-c
RM=rm -f
hello.o:$(OBJS)
(CC) (CFLAGS) ^ -o @
.PHONY:clean
clean:
$(RM) *.o
4.Makefile的remake操作:
有如下的makefile脚本,先生成target对象再重编译remake整个makefile。
-include 目标
目标: 依赖
正则表达式
.config配置文件
Linux内核图形编译工具.Kconfig
Kconfig详解 - 大海中的一粒沙 - 博客园 (cnblogs.com)
menuconfig 和 Kconfig 介绍-阿里云开发者社区 (aliyun.com)
Linux从模块化机制学到Kconfig,Makefile构建配置原理_linux kconfig makefile-CSDN博客
为了正确处理Linux操作系统繁杂的项目文件和复杂的依赖,简单的通过源码完成内核的配置和编译。 Kconfig是一种用于支持Linux内核图形化配置(menuconfig)的脚本语言。通过Kconfigs实现图形化界面的选项设置,便于用户交互。但Linux内核实际使用是通过顶层makefile根据menucofig得到的.conf文件逐级建立的。实质上是在操作系统配置中使用的、Makefile的一种图形化配置方法。
配置内核有几种方式:
make menuconfig:图像化配置。
先生成可执行文件mconf.o生成图像界面,选择结束后生成.config文件。
make XXX_defconfig:板卡适配的默认配置。
先生成可执行文件conf.o,直接把XXX_defconfig保存成.config文件(本质是一个东西)。编译时主Makefile会根据.config中的变量决定编译哪些部分。
*Linux内核源码的这棵树,通过Makefile文件来选择各个目录下的对应的文件是否被编译,.config文件就像是控制台,控制着Makefile文件去编译指定的程序代码文件(主要是C和汇编)。而这一切控制关系是由Kconfig文件建立起来的。