C++ 开始使用C+的Makefile+;(CMake还是GNUMake?)

C++ 开始使用C+的Makefile+;(CMake还是GNUMake?),c++,makefile,cmake,gnu-make,C++,Makefile,Cmake,Gnu Make,我已经拿到了这学期的第一个项目,我被要求提交一个makefile。互联网上的文献有点铺天盖地,再加上我的懒惰,我来到stackoverflow寻求简单的答案。我已经找到了一个开始的好地方 他举的例子是: all: a3driver.o g++ -o a3driver a3driver.o a3driver.o: a3driver.cpp g++ -c a3driver.cpp 我明白。这看起来就像我在UNIX系统上看到的make文件,我用它编译C++文件(只使用过,不需要理解)。 然后我进一

我已经拿到了这学期的第一个项目,我被要求提交一个makefile。互联网上的文献有点铺天盖地,再加上我的懒惰,我来到stackoverflow寻求简单的答案。我已经找到了一个开始的好地方

他举的例子是:

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

a3driver.o: a3driver.cpp
g++ -c a3driver.cpp
我明白。这看起来就像我在UNIX系统上看到的make文件,我用它编译C++文件(只使用过,不需要理解)。 然后我进一步搜索,一个答案建议使用CMake,这与我上面粘贴的代码完全不同


所以我在这个阶段的问题是我应该走哪个方向?我应该学习CMake还是GNUMake?我现在只想处理C++文件。

如果你需要一个真正死掉的简单的Mag文件来编译一个或几个文件,那么你就完成了:

compile:
        g++ myprogram.cpp -o myprogram
(请注意,行必须用制表符缩进,而不是空格)

如果您需要灵活性,那么使用CMake就走上了正确的道路。我建议您从他们的优秀教程或一个简单的示例开始探索CMake,因为从代码中理解基础知识比从手动学习更简单

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


编辑:CMake不用于编译,相反,它可以从项目的综合描述(要编译的文件在哪里?需要什么库?等等)开始,为您生成
makefiles。它通过检查库、识别编译器和执行其他健全性检查来实现这一点,否则您需要自己编写代码。

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

如果您需要使用其本机构建环境跨所有这些不同体系结构支持所有这些不同类型的构建,那么Cmake是很好的。如果您愿意在任何需要构建的体系结构上使用make(gnumake也可以在所有这些体系结构上运行,并且除了visualstudio之外的所有ide都可以很好地与nativemake集成),那么直接使用make就可以了。GNUMake有很多高级特性,这使得它非常灵活

虽然我知道这是一个非常普遍的观点,但我并不真的同意埃塞克斯对自动工具的评估。还要注意的是,automake本身并没有使用异常、冗长的语法:automake文件只是makefile。然而,它们必须被处理,而autoconf就是这样做的。。。根据您的需要,autoconf虽然没有人们想象的那么糟糕,但却更加晦涩难懂。然而,这里不是讨论这个问题的地方

我个人觉得cmake格式比autotools更烦人、更奇怪,而且它在很多方面都不能满足我的需要(例如,它对交叉编译的支持不如autotools好)。但是,我必须说,它生成本机项目文件的能力非常出色——如果您需要的话