【问题标题】:CMake or make. Do I need both?CMake 或制作。我需要两者吗?
【发布时间】:2017-09-25 00:01:16
【问题描述】:

新手问题。我最近遇到了一个包含大量文件和外部库的项目。其中一些库包含 Makefile 和 CMakeLists.txt。 我正在构建一个涉及外部库的类似项目。是否有必要同时学习 CMake 和 make。还是 CMake 就足够了?

【问题讨论】:

    标签: c unix makefile cmake


    【解决方案1】:

    How to frame the concept behind CMake

    无需学习编写makefile,因为CMake 是abstraction layer 或“meta-make”为您生成makefile。并且作为任何抽象层,您只需要学习使用它的功能。但是您还需要了解其开发的任务。在这种情况下,例如What is a build tool?What is a native build environment?

    What does the "c" in cmake stand for?

    但是 - 结合 - 远不止这些,它确实(大部分)消除了学习编译器/链接器开关、平台/框架处理的需要库/可执行文件及其安装等。

    • 交叉编译
    • 跨平台
    • 跨语言
      • 它主要支持 C/C++,但也支持例如Asm、RC、Fortran 和 CMake version 3.8 C#
      • 它确实消除了学习其他脚本语言的需要(通常用于执行构建前或构建后的步骤),因为它嵌入了中等规模的脚本语言

    Difference between using Makefile and cmake to compile the code

    根据我在项目中使用 CMake 的经验:

    • 缺点:您需要在所有目标环境中对其进行测试(诚然,这对 CMake 没有任何特殊性)。在封闭的环境中(例如公司内部),它相对容易维护,但在例如在开源设置中,总会有一个或其他先例,您需要稍微调整您的 CMake 脚本。

    • 1234563在我的项目中使用ninja)。

    参考文献

    【讨论】:

      【解决方案2】:

      CMake 是一个 Makefile(和其他项目文件)生成器。你不需要学习make,除非你打算使用 CMake 本身。

      不过,一些经典的make知识还是有用的,比如:

      • 为并行传递-j 标志
      • make V=1 用于详细输出
      • make clean打扫
      • make installDESTDIR 参数

      【讨论】:

        【解决方案3】:

        CMake 是一个元构建系统。

        使用cmakeCMakeLists.txt 中的设置,CMake 将为目标平台生成构建文件。这可能是 Makefile、Visual Studio 解决方案、Ninja 文件、KDevelop 项目文件……

        如果项目设置为使用 CMake,您甚至不需要查看生成的构建文件 (Makefile)。它们完全是临时的。

        【讨论】:

        • @Rienhart_:我可以无耻地宣传JAWS - 我自己制作的即用型 CMake 设置,我发现官方文档中缺少很多“展示”?您可能会发现它有助于理解 CMake 的工作原理。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多