美文网首页
Gcc|Makefile|CMake的关系

Gcc|Makefile|CMake的关系

作者: en_young | 来源:发表于2022-09-05 16:10 被阅读0次

    秉徇【先有问题,才有方案】


    1. Gcc

    Gcc 是一个编译器,可以编译很多种语言(C,C++,Java等),当我们的程序只有一个源文件的时候,可以直接用 gcc 命令编译它。如下所示。

    gcc -c main.c  // 默认得到链接文件 main.o
    gcc -o main_exe main.o  //得到最终的可执行文件,名为 main_exe
    =======
    gcc -o main_exe -c main.c  // 一步到位
    

    但问题来了,当程序包含多个源文件的时候,用 gcc 逐个编译就会很麻烦,如果能批量编译就好了,可以省很多人为操作时间。

    2. Make + Makefile

    Make 工具是一个批处理工具,Make 工具本身并没有编译和链接 .o 文件的作用,只是通过调用 Makefile 文件来实现批处理。如果进一步在 Makefile 文件中编写 gcc 编译链接等命令,那么就可以实现批量编译了。Make工具 + Makefile文件实现的就是批量执行 gcc 等命令。

    Makefile 文件不仅可以借助 Make 工具批量执行,同时还管理繁多的程序脚本之间的相互依赖关系,但是存在的问题就是:

    • 语法相对比较复杂;
    • 不具有跨平台性;(在不同的计算机平台上, Makefile 文件内容有差别)

    3. CMake

    为了进一步解决上述 Make + Makefile 的两个问题,CMake 来了。CMake 是一个跨平台的编译工具,具体体现在简单的语句就可以描述所有平台的编译过程,语句在文件 CMakeLists.txt 中编写。要使用 CMake 必须在工程的每个文件夹中都编写CMakeLists.txt。

    说白了就是,拿着一份编写好的 CMakeLists.txt 文件在不同的平台都可以编译运行程序,无需修改文件。前提是那个平台已经安装好了 CMake 工具,事实是诸如 Ubuntu 已经预先安装好了 CMake 工具。就像拿着同一份编译好的 Java 字节码去不同的平台都可以直接运行一样,前提是那个平台安装好了对应的 JVM。

    CMake 编译工具类似一个语法糖,它简化了 Makefile 文件的编写,同时能自动生成相应平台的 Makefile 文件,然后再执行 Make 命令编译源码生成可执行程序或者共享库。其实最后还是 Gcc 编译器在起作用。

    当我们没有诸如 visual studio、vs code 等IDE(集成开发环境)编写程序时,我们就得自给自足,做一些本来 IDE 替我们做了的一些事情,例如手动 gcc 编译文件、自行编写 makefile 文件等。

    图1 - CMake 编译产生的文件

    如上图 1 所示,是 CMake 编译得到 Makefile 文件及其他一些中间文件。

    图2 - Make编译结果

    如上图 2 所示,是 Make 编译得到 test 可执行文件。

    相关文章

      网友评论

          本文标题:Gcc|Makefile|CMake的关系

          本文链接:https://www.haomeiwen.com/subject/uptbnrtx.html