C语言-----开发工具的使用make和makefile

时间:2021-08-02 03:58:27

C语言开发工具的使用---MakeMakefile


. 什么是make工具?

  一个软件工程常会包含几十上百个文件,如果每次编译都通过命令行手动编译往往很麻烦且效率低下.Linux中同样有一个功能强大,方便使用的工程管理工具,这就是make

  1.1 Makefile的文件说明:

  使用make文件,首先要编写makefile文件.一个makefile文件包含五个方面的内容:

  •   具体规则
  •   隐含规则
  •   定义含量
  •   指令
  •   注释

   1.2 Makefile的规则:

    因为有工具可以自动生成Makefile文件,所以只要能读懂Makefile的内容,并根据需要进行修改就可以了

            Makefile内容的核心是一系列的规则,这些规则告诉make程序要做的事以及做这件事的依赖的条件.规则的基本格式是:

                     Target : dependency

                     (Tab字符)command

              Target(目标) :通常是要产生的文件的名称

              Dependency(依赖) :指用来输入从而产生目标的文件

              command(命令) :make执行的动作,一个规则可以有多条命令,每个命令占一行.命令行的第一个字符是Tab.

     示例 :

             objects = main.o mouse.o command.o display.o //定义objects参量

             CC = gcc        //定义 CC变量

             CFLAG = -Wall -O2 -g

             game : $ (objects)      //game是最终目标 $(objects)调用objects的值

                    $ (CC) -o edit $(objects) //$(CC)CC变量的值 编译main.o mouse.o command.o display.o并重命名为edit

             main.o : defs.h   //main.o是目标文件 defs.h是依赖文件

             mouse.o : defs.h command.h  //mouse.o是目标文件defs.hcommand.h是依赖文件

             command.o : defs.h command.h  //main.o是目标文件defs.hcommand.h是依赖文件

             display.o : defs.h buffer.h   //main.o是目标文件defs.h buffer.h是依赖文件

             .PHONY : clean  //声明clean是个伪命令,可以不需要依赖条件

              clean :

                   $(RM) edit $(objectd)  

        game的生成规则包含了规则的三个基本要素:目标,依赖,命令;main.o等规则没有命令,属于隐含规则.clean规则没有依赖,不属于编译的内容,只是完成一个指定的动作.隐含规则能够告诉make使用传统的标准方法完成任务.

        1.3 makefile中的几个特殊变量

           $@ : 用在生成规则中,表示当前目标

           $< :  用在生成规则中,表示当前目标的第一个依赖目标

           $^ :  用在生成规则中,表示当前目标的所有依赖目标

           := :   直接赋值,新值直接覆盖原来的值

           ?= :   条件赋值,如果原来无值则赋值,否则保持原来的值

           +=:   加法赋值,新值附加在原来的值后面

           = : 递归赋值,如果右侧包含其他变量,当这些变量的值变化时,被赋值变量的值也随之变化.