2013-05-06 63 views
1

我有我这个学期的第一个项目,我一直在问同一个makefile提交。在互联网上可用的文献是有点压倒性的,加上我的懒惰,我来到stackoverflow的简单答案。我发现this answerBrendan Long是一个很好的开始。入门的Makefile C++(CMake的或gnumake的?)

他给出的例子是:

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

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

,我明白了。这看起来像我在Unix系统上看到的make文件,以及我用来编译C++文件(仅用于,不需要理解)的make文件。

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

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

回答

1

如果你需要编译而已,那么你就用做一个或几个文件真的死了简单的makefile:

compile: 
     g++ myprogram.cpp -o myprogram 

(注意,行必须与选项卡,而不是空格缩进)。

如果您需要更大的灵活性,你是用C进行正确的道路上。我建议你从他们的好教程或一个简单的例子开始探索CMake,因为基础知识比代码学习更简单,而不是从手册中学习。

我个人opionion是为了避免因为不寻常的,详细的语法,有时害怕初学者和技巧,有经验的用户的GNU的Automake(俗称Autohell)。

编辑:CMake的不是用来编译,相反,它可以产生 makefile文件对你来说,从项目的综合描述开始(这里是要编译的文件都需要哪些图书馆等?)。它通过检查库,识别编译器并执行其他完整性检查来完成此操作,否则您需要自行编写代码。

1

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

CMake的是好的,如果你需要支持所有这些不同类型的整个使用他们的母语构建环境所有这些不同架构的基础之上。如果你很乐意使用任何你需要构建的体系结构(GNU在所有这些体系上运行make,除Visual Studio之外的所有IDE都可以与本地make进行良好集成),那么直接使用make就没有问题。 GNU make有许多先进的特性,使它非常灵活。

我真的不与自动工具的esseks评估同意,虽然我知道这是一个非常普遍的意见。另请注意,automake本身并不使用不寻常的冗长语法:automake文件只是makefile。然而,它们必须被处理,而autoconf就是这样做的...... autoconf比较隐晦,尽管并不像人们想象的那样糟糕,取决于你的需求。但这不是讨论的地方。

我个人发现cmake格式比autotools更令人讨厌和奇怪,它在很多方面都不符合我的需求(例如它支持交叉编译不如autotools)。但是我不得不说它能够生成本地项目文件非常好 - 如果你需要的话。