• make工具是一类自动化编译工具
  • 有多种make工具
    • QT- qmake
    • cmake
    • Linux GNU下的make
    • ….
  • make是一个命令工具,是一个解释makefile中指令的工具
  • 不同的make各不相同,也有不同的语法,但本质上都是在“文件依赖性”上做文章
  • 在编译时,编译器只检测程序语法,和函数、变量是否被声明。如果函数未被声明,编译器会给出一个警告,但可以生成 Object File。而在链接程序时,链接器会在所有的 Object File 中找寻函数的实现,如果找不到,那到就会报链接错误码(Linker Error)

    • 也就是说,函数未声明时,如果实际没有使用到的话可能并不会报错(链接错误),只有未声明的告警
  • make命令执行时,需要有一个makefile文件以告诉make命令怎样去编译和链接程序

image.png

makefile规则

  1. target ...: prerequisites ...
  2. command
  3. ...
  4. ...
  • target就是一个目标文件;可以是Objectfile或执行文件,甚至可以只是一个标签label(伪目标)
  • prerequisites就是要生成target所需要的文件或目标
  • command也就是make要执行的命令,可以是任意的shell命令

也就是说,target 这一个或多个的目标文件依赖于prerequisites 中的文件,其生成规则定义在 command 中。prerequisites中如果有一个以上的文件比 target 文件要新的话,command 所定义的命令就会被执行。