makefile学习笔记

来源:互联网 发布:mark knopfler知乎 编辑:程序博客网 时间:2024/05/21 10:32

1.前言

    通常一个项目生成可执行程序的过程是:对源文件编译生成.o结尾的目标文件,然后将.o的文件链接起来生成可执行文件。

    编译:编译器编辑源文件,编译的时候只做程序语法上的检查等,生成相应的目标文件

    链接:将相应的目标文件链接起来,寻找相应的函数实现等。

2.Makefile基础

   目标(targets) : 生成目标需要的文件(prerequisites)

                                     make需要执行的命令(command)

   执行make命令的时候,make会比较targets以及prerequisites文件,由于生成目标文件依赖冒号后面的文件,当这些文件更新或者target文件不存在的时候,会执行下面定义的make命令。

   例子:假设有两个文件main.c head.h,其中main.c引用了head.h里面的定义

   那么makefile为:

    test : main.o

            gcc -o test main.o

    main.o : main.c head.h

            gcc -c main.c

    这样当main.c或者head.h有更新的时候,执行make的时候会重新编译生成心的可执行文件。

3.Makefile语

  (一) 可以使用变量,和shell使用变量一样

              var = ‘main.c’

              使用的时候就是${var}

   ()  依赖关系

             上面的main.o可以写成

             main.o : head.h

  () include其他的makefile文件

         同c++语言的include文件一样,makefile的include也是讲相应的文件内容复制进来

          语法: include *.mk  a.make

                      这条语句将会把所有以mk结尾以及a.make的文件引入进来

  () VPATH以及vpath

        大写的VPATH指定makefile执行make命令的时候找到相应的依赖文件。

         具体语法 VPATH =目录:目录

         比如:

                    -src

                          -head.h

                   -main.cpp

                   -makefile

         其中makefile制定路径VPATH = src

          但是VPATH只是制定make所需要的路径,而g++编译的时候也需要寻找路径,则需要添加-I来将相应的路径名包含进去

          g++ -c main.cpp -I src来指定

          另外通过使用小写的vpath指定makefile搜索路径,如vpath %.h src

    ()@各种变量

           Makefile有三个非常有用的变量。分别是$@,$^,$<代表的意义分别是:

           $@--目标文件,$^--所有的依赖文件,$<--第一个依赖文件。

0 0