makefile简说、编写makefile

LINUX下源码编译

LINUX下源码编译C/C++,通常使用GNU工具链。C/C++的编译过程,通常为源文件(.c、.cc、.cpp后缀文件),编译为中间目标文件(即生成为.S、.o等后缀的中间文件),再通过链接生成可执行文件(编译器的编译过程大致分为四个步骤:预处理、编译、汇编和链接)。


建立一个项目文件project目录结构

makefile简说、编写makefile

注释:以上的结构是最简单的项目目录结构,在大型项目中,project有更多的文件目录,比如OS文件夹、driver文件夹、MMI文件夹等,里面的文件也可能有子文件夹,比如计时器文件夹、信号量文件夹等,但在这些文件夹的下面包括inc和src文件夹,而且每个文件夹里面都可能含有一个makefile文件。


Makefile简介:

Makefile下每条命令下执行正确都会返回0,错误返回非0,然后检测退出。

Make -t=touch 更新目标文件时间但不进行新的编译

Make -q=question 如果目标不在,打印输出。目标在,不显示。

Make -f=file 指定编译执行的makefile文件

 

Makefile中包含的内容:显式规则、隐晦规则、变量定义、文件指示、注释#

注意:如果要在makefile中使用“#”字符,可以用反斜线进行转义,如:“\#”

 

GNU的make工作时的执行步骤:

1、  读入所有的Makefile,读入被include的其他Makefile

2、  初始化文件中的变量

3、  推导隐晦规则,并分析所有规则

4、  为所有的目标文件创建依赖关系链

5、  根据依赖关系,决定哪些目标要重新生成

6、  执行生成命令

Makefile的基本规则:

Target:prerequistes;command

         command


Makefile的使用

1、文档一般包括:立项信息(比如可行性分析等)、需求分析、系统设计、详细设计(比如函数之间的关系模型等)、codeing、测试文档(比如集成测试、系统测试等)

2、src一般是源文件,包括inc文件夹中的.h文件、src文件夹中的.c文件

3、Makefile文件一般和.c文件放在一起。

Makefile文件,即编写编译规则

例如:

makefile简说、编写makefile

#只编译不连接 用-c

#指定头文件的搜索目录 用-I

#要使用gdb调试,加上-g选项(更多选项,参见本博客其他文章)

#install:admin.o menu.o stu.o tea.o

#install是目标,冒号后面的是依赖(即中间部分的目标文件,.o文件需要用.c文件生成)

#编写makefile文件时,gcc必须变成红色才正确,gcc前面要使用一个或者两个tab键)

在makefile中的命令,必须要以tab键起始,一般需要设置tab键为四个空格。


makefile简说、编写makefile

在使用make时,如果修改了.c文件,make只会重新编译修改了的.c文件,但是如果修改了.h文件,则必须先删除原来的可执行文件,再用make生成新的可执行文件。