理解Linux编译概念make、makefile、cmake

  • 编译概念

    参考附录1、2,计算机作为一个物理存在的硬件,内部内置了很多指令集(依据架构x86、ARM…不同略有不同),CPU只能运行指令集中的指令,至于C语言、Python语言之类的,是人认识但是机器不认识的。

    而指令集恰恰是机器认识,人不认识的。

    将人认识机器不认识的语言(C\Python…)转变成机器认识人不认识的的指令集,这个过程就是编译

    当然,具体实现起来还要进行概念细分,在这里先这么理解。其实整个编程世界,就是各种中转工具的理解。

  • gcc

    Linux内,gcc是一个C语言编译器,可以把C语言代码编译成计算机可以执行的二进制文件。

    当程序只有一个源文件,就可以采用gcc直接编译,但是当程序很大,比如包含了几百个源文件,这时候用gcc一个个编译就是一个愚蠢的行为了。

    make就应需而生。

  • make

    make命令是GNU的工程化编译工具,用于编译众多相互关联的源代码文件,以实现工程化的管理,提高开发效率。

    # 常用选项
    -f:指定“makefile”文件;
    -i:忽略命令执行返回的出错信息;
    -s:沉默模式,在执行之前不输出相应的命令行信息;
    -r:禁止使用build-in规则;
    -n:非执行模式,输出所有执行命令,但并不执行;
    -t:更新目标文件;
    -q:make操作将根据目标文件是否已经更新返回"0"或非"0"的状态信息;
    -p:输出所有宏定义和目标文件描述;
    -d:Debug模式,输出有关文件和检测时间的详细信息。
    

    make本身没有编译和链接的功能,而是用类似于批处理的方式通过调用makefile文件中用户指定的命令来进行编译和链接。

  • makefile

    makemakefile实现一键编译大量源文件,make就是那个一键,具体的执行过程在makefile中写好了。

    makefile是一个有格式文件,简单的工程可以人工手写,但是当工程很大时候,手写就比较麻烦了,此时就出现了Cmake

  • Cmake

    Cmake是一个跨平台编译工具,比make更高级。

    Cmake主要是编写CMakeLists.txt文件,用cmake命令将CMakeLists.txt文件转化为make所需要的的makefile文件。

    然后就可以用make执行makefile来进行编译。

  • References

  1. 编译型语言与解释型语言如何在计算机底层运行
  2. 编译的基本概念
  3. linux编译器的下关于gcc、g++、make和CMake几个概念的区别
  4. Linux命令大全:make命令
  5. linux下编译工程(使用命令行、Makefile、cmake编译helloworld)
发布了800 篇原创文章 · 获赞 1155 · 访问量 72万+

猜你喜欢

转载自blog.csdn.net/The_Time_Runner/article/details/104652237