之前感觉makefile很神奇,今天看书正好看到这方面,看过之后只是熟悉一下
1.先看一下gcc的使用,gcc不会用,看懂makefile困难
下面是gcc支持编译源文件的后缀和解释
gcc编译流程分为四个步骤:预处理,编译,汇编,链接
下面看下gcc是如何完成上面四个步骤的,下面是个hello.c程序
#include <stdio.h>
int main()
{
printf("hello world\n") ;
return 0 ;
}
(1)预处理阶段
此过程主要是对头文件(include)和宏定义(#define, #ifdef)进行处理,这个程序就是把stdio.h编译进来,可以使用gcc的-E选项进行查看,这个选项就是在预处理之后停止编译
ps:gcc指令的一般格式为gcc [选项] 要编译的文件 [选项] [目标文件] ,其中目标文件可以省略,gcc默认生成可执行的文件,为:编译文件.out
所以可以使用下面的语句:
#gcc -E hello.c -o hello.i----------- -o是指目标文件,hello.i是经过预处理的c程序
经过预处理把头文件stdio.h的内容包含进来到hello.i中了
(2)编译阶段
这个阶段检查代码的规范性是否有语法错误,检查无误后gcc把代码翻译成汇编代码,我们可以使用-S选项进行查看,使用-S选项只生成汇编代码,但不进行汇编
#gcc -S hello.i - o hello.s 如下
(3)汇编阶段
汇编阶段就是把编译阶段生成的hell.s转化成.o的二进制的目标代码,可以使用-c选项
#gcc -c hello.s -o hello.o
(4)链接阶段
就是把相应的函数库包含进来,一个是静态库,一个是动态库,静态库就是把全部代码放在可执行文件中,动态库是在运行时动态的调用
链接之后就可以生成可执行文件了 gcc hello.o -o hello,然后./hello运行
*****************************************************************
make工程管理器作用类似vs