LINUX下源码编译
LINUX下源码编译C/C++,通常使用GNU工具链。C/C++的编译过程,通常为源文件(.c、.cc、.cpp后缀文件),编译为中间目标文件(即生成为.S、.o等后缀的中间文件),再通过链接生成可执行文件(编译器的编译过程大致分为四个步骤:预处理、编译、汇编和链接)。
建立一个项目文件project目录结构
注释:以上的结构是最简单的项目目录结构,在大型项目中,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文件,即编写编译规则
例如:
#只编译不连接 用-c
#指定头文件的搜索目录 用-I
#要使用gdb调试,加上-g选项(更多选项,参见本博客其他文章)
#install:admin.o menu.o stu.o tea.o
#install是目标,冒号后面的是依赖(即中间部分的目标文件,.o文件需要用.c文件生成)
#编写makefile文件时,gcc必须变成红色才正确,gcc前面要使用一个或者两个tab键)
在makefile中的命令,必须要以tab键起始,一般需要设置tab键为四个空格。
在使用make时,如果修改了.c文件,make只会重新编译修改了的.c文件,但是如果修改了.h文件,则必须先删除原来的可执行文件,再用make生成新的可执行文件。