IDE、Cmake、makefile、make

makefile :就是一个相似脚本的文件,根据一系列规则用于决定哪些文件先编译,哪些文件从新编译等等。甚至于进行更复杂的功能操做,并且还能够执行操做系统的命令。makefile带来的好处就是——“自动化编译”,一旦写好,只须要一个make命令,整个工程彻底自动编译,极大的提升了软件开发的效率。

make是一个命令工具,是一个解释makefile中指令的命令工具。通常来讲,大多数的IDE都有这个命令,好比:Delphi的make,Visual C++的nmake,Linux下GNU的make。linux

这些 Make 工具遵循着不一样的规范和标准,所执行的 Makefile 格式也千差万别。程序员

这样就带来了一个严峻的问题:若是软件想跨平台,必需要保证可以在不一样平台编译。而若是使用上面的 Make 工具,就得为每一种标准写一次 Makefile ,这将是一件让人抓狂的工做。 工具

makefile成为了一种在工程方面的编译方法。 makefile一般依赖于你当前的编译平台,并且编写makefile的工做量比较大,解决依赖关系时也容易出错。性能

这就是make和makefile二者之间的关系。make以后生成obj中间文件,再link一下就生成可执行文件了。学习

 

CMake CMakespa

 CMake就是针对上面问题所设计的工具:它首先容许开发者编写一种平台无关的 CMakeList.txt 文件来定制整个编译流程,而后再根据目标用户的平台进一步生成所需的本地化 Makefile 和工程文件,如 Unix 的 Makefile 或 Windows 的 Visual Studio 工程。从而作到“Write once, run everywhere”。显然,CMake 是一个比上述几种 make 更高级的编译配置工具。操作系统

相似Make工具的功能,CMake工具就是“读取”并执行CMakelists.txt文件中的语句,来生成对应的Makefile。而后开发者就能够经过Make工具来“执行”Makefile了。.net

 

 

在 linux 平台下使用 CMake 生成 Makefile 并编译的流程以下:设计

  1. 编写 CMake 配置文件 CMakeLists.txt 。
  2. 执行命令 cmake PATH 或者 ccmake PATH 生成 Makefile 1ccmake 和 cmake 的区别在于前者提供了一个交互式的界面。。其中, PATH 是 CMakeLists.txt 所在的目录。
  3. 使用 make 命令进行编译。

 

makefile的目的是为了实现自动编译的目的,会用到make工具去执行makefile上的编译指令。并且不一样平台的makefile文件编写规则不同。调试

其实手动编写makefile是一件让人抓狂的事,并且也很愚蠢。

应该使用cmake工具自动生成makefile。这样的话会编写CMakelists.txt就行了。

其实这些编译相关的工做如今大多都交给IDE去完成了。做为知识面的扩展和底层原理的理解仍是有必要的。

======================================================

IDE的功能:

代码编辑、分析功能、编译功能、调试功能;

 

IDE的优缺点:

优势
  • 节省时间和精力。IDE的目的就是要让开发更加快捷方便,经过提供工具和各类性能来帮助开发者组织资源,减小失误,提供捷径。
  • 创建统一标准。当一组程序员使用同一个开发环境时,就创建了统一的工做标准,当IDE提供预设的模板,或者不一样团队分享代码库时,这一效果就更加明显了。
  • 管理开发工做。首先,IDE提供文档工具,能够自动输入开发者评论,或者迫使开发者在不一样区域编写评论。其次,IDE能够展现资源,更便于发现应用所处位置,无需在文件系统里面艰难的搜索。
缺点
  • 学习曲线问题。IDE基本上是比较复杂的工具,为了更好的熟练使用,须要必定的时间和耐心。
  • 初学者的困难。对初学者来讲,使用IDE来学习开发有至关的难度,不适合学习一种新语言时使用。
  • 没法修复坏代码或设计。开发者不能彻底依赖工具的便捷,仍是必须保持专业水准和熟练度,开发的成果好坏主要仍是看开发员的技术。

=================================================

参考连接:

Cmake和makefile:https://blog.csdn.net/qq_28038207/article/details/80791694

Cmake入门实战:https://www.hahack.com/codes/cmake/

GCC、Make、CMake、Makefile、CMakelists的关系:https://www.jianshu.com/p/184a33eddf93

相关文章
相关标签/搜索