【问题标题】:Getting Started with Makefile for C++(CMake or GNUMake?)C++ 的 Makefile 入门(CMake 还是 GNUMake?)
【发布时间】:2023-03-02 23:34:01
【问题描述】:

我有我本学期的第一个项目,我被要求用 makefile 提交它。互联网上的文献有点铺天盖地,再加上我的懒惰,我来到stackoverflow寻求简单的答案。我发现Brendan Longthis answer 是一个很好的起点。

他举的例子是:

all: a3driver.o
g++ -o a3driver a3driver.o

a3driver.o: a3driver.cpp
g++ -c a3driver.cpp

我理解。这看起来和我在 Unix 系统上看到的和我用来编译 c++ 文件的 make 文件一模一样(只用过,不需要理解)。

然后我进一步搜索,this question 的答案建议使用与我上面粘贴的代码完全不同的 CMake。

所以我现阶段的问题是我应该采取哪个方向?我应该了解 CMake 还是 GNUMake?我现在只打算处理 C++ 文件。

【问题讨论】:

    标签: c++ makefile cmake gnu-make


    【解决方案1】:

    只有您可以回答这个问题,因为它在很大程度上取决于您的需求。 Cmake 是“构建控制文件生成器”,而不是构建控制程序。它实际上并不构建代码:相反,它会创建一个 makefile 或 Visual Studio / Xcode / Eclipse 项目文件等。然后您使用该构建程序(make、Visual Studio、XCode、Eclipse)来实际构建代码。

    如果您需要使用原生构建环境在所有不同架构中支持所有这些不同类型的构建,Cmake 非常适合。如果您乐于在需要构建的任何架构上使用 make(GNU make 也可以在所有这些架构上运行,并且所有这些 IDE 可能除了 Visual Studio 与本机 make 有很好的集成),那么直接使用 make 就可以了。 GNU make 有许多高级特性,使其非常灵活。

    我不太同意 esseks 对 autotools 的评估,尽管我知道这是一个非常普遍的观点。另请注意,automake 本身不使用不寻常的、冗长的语法:automake 文件只是 makefile。但是,它们必须被处理,而 autoconf 就是这样做的…… autoconf 更加晦涩,尽管没有人们想象的那么糟糕,具体取决于您的需要。不过这里不是讨论的地方。

    我个人觉得cmake格式比autotools更烦更奇怪,而且它在很多方面都不能满足我的需求(例如它对交叉编译的支持不如autotools)。但是我不得不说它生成原生项目文件的能力真的很棒——如果你需要的话。

    【讨论】:

      【解决方案2】:

      如果你需要一个非常简单的 makefile 来只编译一个或几个文件,那么你就完成了:

      compile:
              g++ myprogram.cpp -o myprogram
      

      (注意行必须用制表符缩进,而不是空格)。

      如果您需要灵活性,那么 CMake 就是您的正确选择。我建议你从他们的好教程或一个简单的例子开始探索 CMake——因为基础知识更容易从代码中理解,而不是从手册中学习。

      我个人的意见是避免使用 GNU Automake(通俗地称为 Autohell),因为不寻常的冗长语法有时会吓到初学者并欺骗更有经验的用户。

      编辑:CMake 不用于编译,而是可以从项目的综合描述开始为您生成 makefile(要编译的文件在哪里?需要哪些库?等等。)。它通过检查库、识别编译器和执行其他你需要自己编码的完整性检查来做到这一点。

      【讨论】:

        猜你喜欢
        • 2010-11-16
        • 2012-09-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-08
        • 1970-01-01
        • 1970-01-01
        • 2019-12-12
        相关资源
        最近更新 更多