个人总结

首先makefile是由make来编译,而makefile的生成可以由GUN autotools和CMake来实现,但前者没有CMake的CMakelist.txt直观,所以我们一般用CMake来跨平台的生成makefile!

——————————————以下是从网络上查找的资料————————————

Cmake与Make

“Make”是一个编译工具,它控制可执行程序程序源文件中非源码文件的生成。也就是编译过程生成的文件

“Make”工具需要清楚的知道如何构建程序。 它通过一个叫做“makefile”的文件知晓如何构建你的程序。这个文件列出了所有的非源码文件以及如何由别的文件来计算它。

当你编写了一个程序,你应该为它写一个makefile文件,这样才有可能通过使用“Make”来构建和安装你的程序。

它仅仅更新编译那些直接或者间接依赖这些改变了的源码文件的非源码文件

-------

CMake  Cross Make

  CMake支持跨平台Make。它可以产生Makefile文件,

  CMake 辨别使用哪种编译器去编译给出的源码种类。

  CMake为每一种类型的目标平台按照正确的顺序调用命令。

CMake比GNU构建系统更有优势:

  用于编写CMakeLists.txt文件的语言具有可读性和很容易理解。

  不仅可以使用“Make” 来构建工程。  

  支持多种生产工具,比如Xcode, Eclipse, Visual Studio, etc.

CMake与Make对比具有以下优点

  ◾跨平台发现依赖的系统库。
  ◾自动发现和工具链的配置。
  ◾轻松地将您的文件以一个平台无关的方式编译成共享库,比make更容易使用。

makefile:编译指南

Linux 环境下的程序员使用GNU make来构建和管理自己的工程;在 Linux(unix )环境下使用GNU 的make工具能够比较容易的构建一个属于你自己的工程,整个工程的编译只需要一个命令就可以完成编译、连接以至于最后的执行。

不过这需要我们投入一些时间去完成一个或者多个称之为Makefile 文件的编写。

一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令

GNU autotools

在Linux系统开发环境中,GNU Autotools 可以完成手工写Makefile这项复杂而有趣的工作。  

 autotools是系列工具, 它主要由autoconf、automake、perl语言环境和m4等组成;所包含的命令有五个:
    (1)aclocal
    (2)autoscan
    (3)autoconf
    (4)autoheader
    (5)automake

最新文章

  1. Java开发中的23种设计模式详解
  2. LintCode 111 Climbing Stairs
  3. salesforce 零基础开发入门学习(三)sObject简单介绍以及简单DML操作(SOQL)
  4. class && struct
  5. Https 公钥、私钥、证书
  6. node工具--express
  7. c/c++常用代码 -- 共享内存
  8. HDU2553N皇后问题(状态压缩)
  9. windows下python安装paramiko
  10. winserver2008下创建计划任务注意点
  11.   PS2: 这篇文章中的图片绘图工具使用的是Dia (sudo apt-get install dia)。据说yEd也很不错。
  12. 【BZOJ3450】【Tyvj1952】Easy 可能DP
  13. Cantor表 1083
  14. iOS9 适配网络请求,适配分享失败,适配无法正常跳转到客户端
  15. Java 读书笔记 (二) 对象和类
  16. sql group by max
  17. Linux中断(interrupt)子系统之一:中断系统基本原理【转】
  18. Windows 2008 Server搭建Radius服务器的方法
  19. Arraylist静态初始化
  20. rails 中 create, new, build, save 的用法以及误区汇总 (转)

热门文章

  1. atitit。获取表格的字段注释metadata的原理以及AND 字段表格描述文档方案
  2. 修改JQM的默认配置属性
  3. yii2 ContentDecorator 和 block 挂件
  4. 0068 Git入门的第一节课
  5. 从constructor中抛出exception后,constructor会返回null吗?
  6. cocosbuilder的一些坑
  7. love2d杂记9--光照效果
  8. CSS布局奇淫技巧之--各种居中<转>
  9. 网桥bridge
  10. 组建一台计算机5_硬件5 多位存储器&累加器&初始汇编(1)