gcc make makefile 用法

一 .gcc 

编译指令:
gcc t.c -o t

生产t可执行文件

此编译过程是分为四个阶段进行的:

1.预处理(也称预编译,Preprocessing)

             (1).作用:展开#后的所有头文件。

            (2).格式: gcc -E t.c -o t.i 

                                 或 gcc -E t.c

                              可以输出t.i文件中存放着t.c经预处理之后的代码。

                              gcc的-E选项,可以让编译器在预处理后停止,并输出预处理结果。

2.编译(Compilation)

                  (1).作用:语法检查,将C语言变为汇编语言。

                               预处理之后,可直接对生成的t.i文件编译,生成汇编代码:
    (2).格式:gcc -S t.i -o t.s
                             gcc的-S选项,表示在程序编译期间,在生成汇编代码后,停止,-o输出汇编代码文件。

3.汇编 (Assembly)

                   (1).作用:将汇编文件(文本文件)变为机器能识别的二进制文件。

                                    对于生成的汇编代码文件t.s,将其编译为目标文件:
    (2).格式:  gcc -c t.s -o t.o

        4 .连接(Linking)

                    (1).作用:将程序的目标文件与所需的所有附加的目标文件连接起来,最终生成可执行文件。

                                    其中附加的目标文件包括静态连接库和动态连接库。

                      对于生成的t.o,将其与C标准输入输出库进行连接,最终生成程序t

     (2). 格式 :gcc t.o -o t

           之后在命令行窗口中,执行 ./t 

           得到输出结果。

二. make和make file

    1. make命令运行时,须要一个 Makefile 文件,以告诉make命令须要怎么样的去编译和链接程序。
    2. 一个Makefile文件包含五个方面的内容:

           (1). 具体规则

           (2). 隐含规则

           (3).定义变量

           (4). 指令

           (5). 注释      
    3.Makefile的规则

            (1). 作用: 告诉make程序要做的事以及做这件事所依赖的条件。

            (2).格式:target: dependency
                  (Tab字符)command
               target(目标): 通常是要产生的文件的名称
              dependency(依赖): 指用来输入从而产生目标的文件
              command(命令): 是make执行的动作,一个规则可以有多条命令,每个命令占一行。命令行的第一个字符是Tab。

            (3).示例 :

Target = hello

Object = hello.o  print.o

$(Target) : $(Object)

gcc $(Object) -o $(Target)

.PHONY:clean

clean:

         rm  *.o hello

                          hello的生成规则包含了规则的三个基本要素:目标、依赖、命令。clean规则没有依赖,不属于编译的内容,

                    只是完成一个指定的动作。隐含规则能够告诉make使用传统的标准方法完成任务。

         例如,生成一个目标文件的方法是使用C编译器编译C语言源程序,这个步骤所用到的命令基本都是相同的。

                 使用隐含规则就无须详细指定这些命令,而make能按照文件名的后缀的变化,决定所采用的规则。   

             在写完makefile之后用 make工具 

         (4).make工具的基本用法:
                 make [-C dir] [-f file] [target ...]
                -C dir:   执行时进入dir目录,默认是当前目录
                  -f file:  使用file作为Makefile
                  target:   要完成的目标,目标在Makefile中定义,默认是定义的第1个目标      


你可能感兴趣的:(linux,基础)