Linux编译四组件(四):Makefile篇

290 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

Makefile

make是一个命令工具,它解释Makefile 中的指令(应该说是规则)。 在Makefile文件中描述了整个工程所有文件的编译顺序、编译规则。 在Makefile 中可以使用系统shell所提供的任何命令来完成想要的工作。

一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。 Makefile(在其它的系统上可能是另外的文件名)在绝大多数的IDE 开发环境中都在使用,已经成为一种工程的编译方法。

  • Makefile文件中主要包括三个主要的部分:

1.target ==目标== 想要生成的可执行程序(文件、库等),相当于输出

2.dependence ==依赖== (为了生成可执行文件需要用到的文件), 相当于输入,允许没有依赖。

3.conmmand ==命令== 具体动作,为了生成目标才去的操作

流程:

  1. vim Makefile 编写Makefile文件,必须是这个名称!

  2. 填写三个部分,保存退出

  3. 执行make指令进行编译,等价于make hello

  4. 如果make之后没有对象,默认执行第一个目标如果make之后没有对象,默认执行第一个目标

异常分析 : 输入make之后,出现遗漏分隔符错误 反复修改没有解决问题,编辑文件时gcc,rm前面使用的是Tab分隔符。 最后使用linux自带的编辑器gedit打开Makefile,将vim下的Tab键换为gedit的Tab键,得到正确结果。

总结遗漏分隔符问题解决方法:

  1. gccrm之前一定要有一个tab分隔符,不能使用空格。

  2. 使用vim编辑文件,如果配置文件vimrc中有set expandtab(使用空格代替制表符) ,则也会出现遗漏分隔符问题。因此最好将这条语句注释,或者使用gedit编辑器重新编辑makefile

注:make也属于增量编译,如果对代码有改动,最后操作时间改变,再次执行make指令就不会显示 xx文件 是最新的了。

  • 另外在Makefile中添加clean项,其中包含删除某文件语句,保存退出 执行make clean就会进行工程清理的工作,把生成的中间文件都删除掉,只保存最纯粹的源代码。

  • 小结 Makefile还是比较经典的工程管理工具,但平常使用时不太会手写,而是运用一些工具来生成:

  1. cmake

  2. blaze (中文名:火焰刀)Google出品, 开源版为bazel