Makefile
项目结构规划(make编译)
特别注意:不论是目录还是文件,文件名中一律不要带空格,一律不要用中文,最好的方式:字母,数字,下划线,不要给自己找麻烦,远离各种坑。
主目录名nginx
_include目录:专门存放各种头文件; 如果分散:#include “sfaf/sdafas/safd.h”
app目录:放主应用程序.c(main()函数所在的文件)以及一些比较核心的文件;
1)link_obj:临时目录:会存放临时的.o文件,这个目录不手工创建,后续用makefile脚本来创建
2)dep:临时目录,会存放临时的.d开头的依赖文件,依赖文件能够告知系统哪些相关的文件发生变化,需要重新编译,后续用makefile脚本来创建 3)nginx.c:主文件,main()入口函数就放到这里; 4)ngx_conf.c :普通的源码文件,跟主文件关系密切,又不值得单独放在 一个目录;
misc目录:专门存放各种杂合性的不好归类的1到多个.c文件;暂时为空
net目录:专门存放和网络处理相关的1到多个.c文件,暂时为空
proc目录:专门存放和进程处理相关的1到多个.c文件,暂时为空
signal目录:专门用于存放和信号处理相关的1到多个.c文件;
编译工具make的使用概述
我们要用传统的 ,经过验证没有问题的方式来编译我们的项目,最终生成可执行文件
每个.c生成一个.o,多个.c生成多个.o,最终这些.o被链接到一起,生成一个可执行文件
gcc -o nginx ng1.c
gcc -o nginx ng1.c ng2.c
- 我们要借助make的命令来编译:能够编译,链接。。。。最终生成可执行文件,大型项目一般都用make来搞;
- make命令的工作原理,就去当前目录读取一个叫做makefile的文件(文本文件),根据这个makefile文件里的规则把咱们的源代码编译成可执行文件;咱们开发者的任务就是要把这个makefile文件写出来;这个makefile里边就定义了我们怎么去编译整个项目的编译、链接规则【实际上makefile文件就是一个我们编译工程要用到的各种源文件等等的一个依赖关系描述】有类似autotools自动生成makefile,这里不讲
- makefile文件:文本文件,utf8编码格式,没有扩展名,一般放在根目录下[也会根据需要放在子目录](这里我们放在nginx/)。不同的程序员写的makefile代码也会千差万别;但不管怎么说,最终都要把可执行文件给我生成出来;
规划一下makefile文件的编写
- nginx根目录下我会放三个文件:
1.1)makefile:是咱们编译项目的入口脚本,编译项目从这里开始,起总体控制作用; 1.2)config.mk:这是个配置脚本,被makefile文件包含;单独分离出来是为了应付一些可变的东西,所以,一般变动的东西都往这里搞; 1.3)common.mk:是最重要最核心的编译脚本,定义makefile的编译规则,依赖规则等,通用性很强的一个脚本,并且各个子目录中都用到这个脚本来实现对应子目录的.c文件的编译;
- 每个子目录下(app,signal)都有一个叫做makefile的文件,每个这个makefile文件,都会包含根目录下的common.mk,从而实现自己这个子目录下的.c文件的编译。现在的makefile不支持目录中套子目录,除非大家自己修改;
- 其他规划,上边讲过;
app/link_obj临时目录,存放.o目标文件
app/dep:存放.d开头的依赖关系文件;
makefile脚本用法
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 fengyun's Blog!
评论