使用make和Cmake而不是从命令行编译的优势?

时间:2018-04-29 23:01:20

标签: cmake gnu-make

我总是从命令行在G ++下编译我的所有C ++代码。

为什么人们会使用像Cmake和gcc这样的东西,有什么优势?

如果真的有理由,如何将我的项目转换为使用makefile?

现在,我只是使用一个文本文件,其中列出了我需要的所有命令来编译项目,当然,编译整个项目的那个命令应该我觉得我想重新编译每个c和cpp文件

2 个答案:

答案 0 :(得分:0)

  

我只使用一个文本文件,其中包含编译项目所需的所有命令列表......

这不是一个便携式标准化解决方案,它对您的个人工作流程来说是独一无二的。 MakefileCMakefile允许您描述如何将代码编译到计算机,而不是人类,因此其他人可以运行一两个简单的命令(希望)和你一样的结果。

您的方法现在可能有用,但是在一个包含数千个源文件,数十万个错综复杂的交叉依赖项并且需要数小时编译的非平凡项目中,您需要自动化。

例如,您的文本文件可能包含:

 g++ input.cpp output -lstdc++

这是最简单的案例,一个源文件,一个输出文件,一个库。在非平凡的代码中,命令如下所示:

g++ -m32 -c -g -Wall -Iinclude -Isrc -I../Perlingo\ Shared\ Objects -include include -fPIC  -MMD -MP -MF "build/Debug/GNU-Linux-x86/src/BhamEvent.o.d" -o build/Debug/GNU-Linux-x86/src/BhamEvent.o src/BhamEvent.cpp

这只是为了了解您可能需要包含多少标志和选项才能正确编译。其中一些路径是存储在Makefile中的变量,或者由cmakeconfigure等工具放入其中。

关于Makefile的最好的事情之一是,您可以使用-j8之类的标记进行并行构建,这些标记可同时构建多达八个内容。

答案 1 :(得分:0)

使用文本文件以及编译项目所需的所有命令列表是进入托管构建的一步。

让我们定义以下构建改进级别:

  1. 每次编译每个文件,依赖项未知
  2. 仅在必要时将文件集群到要构建的块或库
  3. 创建构建描述文件并使用makenmake
  4. 使用跨平台构建描述文件和cmake
  5. 使用可以根据cmake文件创建项目的IDE
  6. 我使用1级来简单演示问题和解决方案。但在我的项目中,我总是在5级工作。似乎你正处于从2级到3级的过渡期。