转自 http://mzl626.blog.163.com/blog/static/4770270200943011263246/

& http://docs.oracle.com/cd/E19205-01/821-2518/6nne815f2/index.html

& http://hi.baidu.com/jian_fei_yang/item/d4f4462ffd35900943634af8

& http://hi.baidu.com/black/item/18af7d4423de2b2111ee1e26

1.  gamke, make, nmake, dmake, cmake 异同


现有编译工具

------------------------------------------------------------------------------------------------------------------------

gmake是GNU Make的缩写。
      Linux系统环境下的make就是GNU Make,之所以有gmake,是因为在别的平台上,make一般被占用,GNU make只好叫gmake了。
      比如在安装二进制文件进行编译时要使用make命令,但如果在Solaris或其他非GNU系统中运行,必须使用GNU make,而不是使用系统自带的make版本,这时要用gmake代替make进行编译。
      Solaris包含两种make工具:GCC (GNU Compiler Collection)工具套装包括一个 C 编译器和一个 C++ 编译器,Solaris自身的 make 实用程序。

freebsd自带的make是BSD make。两者的不同在于Makefile部分不兼容。即使是部分,有时候也不能完全把软件给make出来。

另外,windows下自带的make叫做nmake哟。(http://wtqy.blogbus.com/logs/40756172.html)

 跨平台的编译工具

------------------------------------------------------------------------------------------------------------------------

Dmake是同GNU Make类似的一个工具。其命令格式自成一体,但是可以适用于Linux, Solaris, and Win32 and other platforms。Dmake有一个变种,被OpenOffice.org使用。dmake 是一个命令行工具,与 make(1) 兼容。dmake 能够以网格、分布、并行或串行模式生成目标。如果使用的是标准 make(1) 实用程序,在对 makefile 进行任何更改时可以毫不费力地过渡到使用 dmake。dmake 是 make 实用程序的超集。

  跨平台的编译工具,其中最有名的两个是 cmake 和 scons,cmake 之所以出名估计是因为 KDE 4 从 autotools 转向用 cmake 来编译。而 scons 则是 lighttpd 原来用的编译工具,它现在也转向 Python 了。

cmake 和 python 大概代表了新一代跨平台编译工具的两种方向。第一种 (cmake) 是延续并改良传统 automake, autoconf 工具链,将之合为一体,但最终仍然生成 Makefile, Visual Studio 的 .sln,Xcode 的 .xcodebuild 文件,依赖现有编译工具 (make, nmake, vcbuild, xcodebuild) 来编译;第二种则是完全消除现有编译工具的调用,直接调用编译器,scons 就属于这一类 (scons 还有一个特点是完全不用专门的语言,控制编译的脚本就是 Python)。
     从人气上 来说,反倒是走改良路线的 cmake 比 scons 好一些,有几个原因:scons 基于 Python,可能有些代码不是很照顾速度,于是类似 KDE 这样的大项目编译起来会很慢;scons 开发比较慢,最近一直只是 bugfix。不过相对 cmake,scons 的优点是文档非常细致可读,而 cmake 的文档则非常少,可以在网上找到的只有几篇介绍性的文章和参考手册,不像 scons 有一本 User Guide。
     与之相关的工具还有 Jam (包括它的变体 FTJam, Boost.Build), Waf, Bakefile 等。其中比较新的 Waf 是一个 scons 的改进,在它的提供的 benchmark 中,显示通过缓存方式可以大大改进编译的速度。不过因为这个项目还很新,目前没有什么软件用它作为编译系统。
     Bakefile 走的则是 cmake 的路子,从名称上也可以看出,它最终也是通过生成 Makefile 一类的文件来完成编译的。不过不同的地方在于 cmake 用的语法很像 autotools 用的 m4 的传统语法,而 bakefile 则完全用 XML 来定义编译规则了,这一点倒很像 ant。Bakefile 倒是有不少著名的项目使用,比如 wxWidgets, WebKit, VCF, libxml。

2. 交叉编译器制作流程

"交叉编译器”(cross compiler),用作跨平台来编译程序!做交叉编译器要弄清楚3个概念:host, build, target:
              build -- 你在什么平台上编译的这个编译器
              host -- 这个编译器将来要在什么平台上运行
              target -- 编译器最终会生成在哪个平台上执行的可执行代码

详见:http://blog.csdn.net/colin719/article/details/758000

3. CMake(http://www.cmake.org/)用法

CMake 是个开源的跨平台自动化建构系统,它用组态档控制建构过程(build process)的方式和 Unix 的 Make 相似,只是 CMake 的组态档取名为 CmakeLists.txt。Cmake 并不直接建构出最终的软件,而是产生标准的建构档(如 Unix 的 Makefile 或 Windows Visual C++ 的 projects/workspaces),然后再依一般的建构方式使用。这使得熟悉某个集成开发环境(IDE)的开发者可以用标准的方式建构他的软件,这种可以使用各平台的原生建构系统的能力是 CMake 和 SCons 等其他类似系统的区别之处。CMake 可以编译源代码、制做程式库、产生适配器(wrapper)、还可以用任意的顺序建构执行档。CMake 支援 in-place 建构(二进档和源代码在同一个目录树中)和 out-of-place 建构(二进档在别的目录里),因此可以很容易从同一个源代码目录树中建构出多个二进档。CMake 也支援静态与动态程式库的建构。
“CMake”这个名字是 "cross platform make" 的缩写。虽然名字中含有 "make",但是 CMake 和 Unix 上常见的“make”系统是分开的,而且更为高阶。

详见:

http://zh.wikipedia.org/wiki/CMake

http://blog.csdn.net/dbzhang800/article/details/6314073 (cmake 学习笔记)

http://digdeeply.info/archives/0421949.html (cmake命令 安装、用法简介)

http://sinojelly.blog.51cto.com/479153/319173  (CMake入门指南)

http://hi.baidu.com/black/item/18af7d4423de2b2111ee1e26 (cmake 简介CMake 使用方法)

问题合集 ----- linux下编译工具 make及相关相关推荐

  1. linux3.10.53编译,根据官方文档在Linux下编译安装Apache

    根据官方文档在Linux下编译安装Apache 前言 永远记住官方文档才是最准确的安装手册,这篇文章仅为对官方文档的解读和补充,学习提升务必阅读官方文档: http://httpd.apache.or ...

  2. linux下编译libuv,linux下libuv库安装教程

    下载并编译libuv libuv需要自己手动下载源码,并手动编译. 当前目录为:/home/xlz/test/github/,在后面,会用$PATH来代替,我的系统的Debian8,64bit. $g ...

  3. 实验 Linux下C工具应用

    实验报告 实 验(一) 题     目 Linux下C工具应用 专       业 计算机科学与技术 计算机科学与技术学院 目  录 第1章 实验基本信息... - 4 - 1.1 实验目的... - ...

  4. 详解linux下auto工具制作Makefile源码包(制作篇)

    2019独角兽企业重金招聘Python工程师标准>>> 详解linux下auto工具制作Makefile源码包(制作篇) 水木杨 一.     概述 为了更好的制作configure ...

  5. linux下编译make文件报错“/bin/bash^M: 坏的解释器,使用grep快速定位代码位置

    一.linux下编译make文件报错"/bin/bash^M: 坏的解释器 参考文章:http://blog.csdn.net/liuqiyao_01/article/details/415 ...

  6. 一份简单的在 Linux下编译及调试 C 代码的指南

    摘要: 一份简单的在 Linux下编译及调试 C 代码的指南 对于Linux下的C程序员来说,几乎天天都会和Linux打交道.但在很多人的眼中,Linux是一个易用性极差.靠命令驱动的操作系统,根本无 ...

  7. linux下软件编译终止,[2018年最新整理]linux下编译运行程序命令大全.ppt

    [2018年最新整理]linux下编译运行程序命令大全 1. 项目课题引入 2. Vi编辑器的使用方法 3. Linux中C语言程序的编辑 4. Linux中C语言程序的运行 5. 现场演示案例 课题 ...

  8. linux redis php,Linux下编译redis和phpredis的方法

    这篇文章主要介绍了Linux下编译redis和phpredis的方法,分析了redis的下载,编译,安装及遇到的问题与相应的解决方法,需要的朋友可以参考下 本文讲述了Linux下编译redis和php ...

  9. Linux下编译、链接、加载运行C++ OpenCV的两种方式及常见问题的解决

    Linux下编译.链接.加载运行C++ OpenCV的两种方式及常见问题的解决 在Linux下安装完OpenCV C++之后(还没有安装的读者请参考Ubuntu 18.04 安装OpenCV C++) ...

最新文章

  1. 转:vc中如何通过http的post方式上传文件
  2. 转:如何调用另一个python文件中的代码
  3. 【yolo】ubuntu18.04 yolo打开摄像头实时检测框目标 转化pth文件为onnx
  4. camel in action
  5. G1 GC 日志格式
  6. 异常单据锁定涉及的数据库表
  7. HTML---文本样式---行高---字符间距---文本对齐方式---文本使用线条修饰---文本的大小写---处理元素内的空白---字体样式---无序列表有序列表---表格
  8. python变量未定义_引入模块的全局变量未定义
  9. mysql数据库主从停止_Mysql 主从数据库
  10. Java视频教程从入门到精通(2021完整版)
  11. gigabyte计算机主板图解,技嘉主板BIOS如何设置及进入 技嘉主板BIOS设置图解教程(2)...
  12. 智能科学与技术——介绍概要
  13. 当我们在谈论高并发的时候究竟在谈什么?
  14. Java全栈开发---Java ERP系统开发:商业ERP(十二)数据的导入导出(Excel)
  15. 手机芯片战争:英特尔追ARM 联发科战高通
  16. Excel图表7——漏斗图
  17. java—set创建迭代器的两个方法
  18. 英特尔眼中的三大科技趋势
  19. 请教股票曲线图的问题
  20. Hadoop之机架感知

热门文章

  1. 第一次面试,面完,直接拒了!
  2. 黑客成员煽动DDos攻击全球银行,多个国内银行赫然在列...
  3. mac终端的代理设置指南
  4. RK3399平台开发系列讲解(网络篇)7.38、网卡驱动程序数据结构
  5. idea中jar包关联源码
  6. 数据决策分析平台建设方案,附51页解决方案PPT
  7. CC Compare发布,再见了beyoned compare, 用qt自己写了个代码对比同步工具,大家给提提建议呢
  8. jvm初学-什么是Native方法
  9. echart图表缩放到一定比例(可自定义)后,停止放大,还可以缩小回去
  10. 机器学习-监督学习及典型算法