编译工具make、gmake、cmake、nmake和Dmake的区别
编译工具make、gmake、cmake、nmake和Dmake的区别
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.youkuaiyun.com/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.youkuaiyun.com/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 使用方法)
4.cmake的大致介绍
大家都知道,写程序大体步骤为:
1.用编辑器编写源代码,如.c文件。
2.用编译器编译代码生成目标文件,如.o。
3.用链接器连接目标代码生成可执行文件,如.exe。
但如果源文件太多,一个一个编译时就会特别麻烦,于是人们想到,为什么不设计一种类似批处理的程序,来批处理编译源文件呢,于是就有了make工具,它是一个自动化编译工具,你可以使用一条命令实现完全编译。但是你需要编写一个规则文件,make依据它来批处理编译,这个文件就是makefile,所以编写makefile文件也是一个程序员所必备的技能。
对于一个大工程,编写makefile实在是件复杂的事,于是人们又想,为什么不设计一个工具,读入所有源文件之后,自动生成makefile呢,于是就出现了cmake工具,它能够输出各种各样的makefile或者project文件,从而帮助程序员减轻负担。但是随之而来也就是编写cmakelist文件,它是cmake所依据的规则。所以在编程的世界里没有捷径可走,还是要脚踏实地的。
所以流程如下:

nmake命令(windows下的makefile)
1. 如果已经有vc6的dsp工程,可直接导出nmake脚本文件(.mak) “Project - Export Makefile...” nmake -f nMakeTest.m...
Linux下Makefile详解 - 优快云博客
2018-4-21
在linux上安装cmake(已测过,好用!) - 优快云博客
2018-6-26
gmake与make的区别 - 优快云博客
2018-3-9
gmake和make 的区别 - 优快云博客
这几天在发现还有个gmake,不清楚和make的区别,所以查来看看,并记下来,方便查找。~~~gmake是GNU Make的缩写。 Linux系统环境下...
2018-6-3
gmake缺失错误
gmake下载地址 ftp://ftp.gnu.org/pub/gnu/make/make-3.80.tar.gz 安装方法 ./configure --prefix=/usr && ma...
Linux内核Makefile浅析
但是,一种“找到真相”的冲动迫使我想了解Linux内核编译的整个过程是怎样的。为此,查了很多资料,发现《深度探索Linux操作系统:系统构建和原理解析》一文的第三章对...
2018-5-8
Linux下如何完整的构建cmake项目 - 优快云博客
CMake项目的完整构建Linux下的CMake项目通常由几个文件夹组成。小伙伴们可以先在自己的电脑上新建一个文件夹,作为你代码的根目录,然后往里面建几个子文件夹,这里...
2018-6-21
gmake
gmake下载地址 ftp://ftp.gnu.org/pub/gnu/make/make-3.80.tar.gz 安装方法 ./configure --prefix=/usr && ...
gmake和make 的区别 - 优快云博客
2018-3-9
Linux下如何完整的构建cmake项目 - 优快云博客
Linux下的CMake项目通常由几个文件夹组成。小伙伴们可以先在自己的电脑上新建一...深度学习 9篇 Tensorflow实战系列 18篇 SLAM 38篇 3D 2篇 数据处理 4...
2018-6-10
make与gmake的区别 - 优快云博客
2018-5-3
Linux 下 Make 命令 - 优快云博客
Linux 下 make 命令是系统管理员和程序员用的最频繁的命令之一。管理员用...深度学习 3篇 高并发 5篇 音视频 6篇 EasyDarwin 3篇 数学2篇 团队...
2018-6-23
gmake v3.8
2012年08月02日 1.88MB 下载
windows下使用nmake编译
从网上下的demo,使用MinGW下载编译,但是调用make的时候提示 Makefile:1: *** missing separator. Stop. 现在猜测是第一行的问题 !in...
VC中使用nmake命令编译方法
原文出自:http://blog.youkuaiyun.com/killer000777/archive/2007/09/08/1777519.aspx VC6.0其实已经不再使用makefi...
VS中的c++的makefile nmake
VS中的c++的makefile nmake 简介 大家已经习惯于微软提供的功能强大的IDE,已经很少考虑手动编连项目了,所谓技多不压身,有空的时候还是随我一块了解一下命令行编译。 C/C++/...
nmake环境变量配置
设置nmake,cl等的环境变量 不使用vs的IDE进行编译,直接使用nmake,cl等工具,在命令行下需要做许多工作: 1. 为了在命令行下直接使用nmake,需要将nmake的目录加...
nmake工具的用法
[源] = [《Windows 环境下32位汇编语言程序设计(第2版)》] 2.4 make工具的用法 2.4.1 make工具是什么 在DOS时期编写汇编程序的时候,编译器和链...
windows nmake工具
2013年07月22日 92KB 下载
ActivePerl和dmake安装文件
2017年06月10日 19.16MB 下载
dmake-4.12
2012年02月06日 302KB 下载
windows下安装perl模块方法和必备软件nmake dmake devcpp.zip
2013年12月18日 8.01MB 下载
dmake完整版工具
2012年06月16日 164KB 下载
比较Make和CMake
比较Make和CMake Make(或者说一个Makefile)是构建系统 - 它驱动编译器和其它构建工具来构建你的代码。 “Make”是一个工具,它控制可执行文件和程序的源文件以及程序的其他非...
CMake入门教程
CMake入门教程 参考文献:http://www.ibm.com/developerworks/cn/linux/l-cn-cmake/index.html 官方网址:http://ww...
make 与gmake
一种说法: gmake是GNU Make的缩写。 Linux系统环境下的make就是GNU Make,之所以有gmake,是因为在别的平台上,make一般被占用,GNU make只好叫gmak...
gmake和make、nmake、Dmake
gmake是GNU Make的缩写。 Linux系统环境下的make就是GNU Make,之所以有gmake,是因为在别的平台上,make一般被占用,GNU make只好叫gmake了。 ...
make工具及其使用
概述 整个软件系统被划分为几个小的子系统,而每个小的子系统又划分为几个独立工作的由一组文件组成的模块时,就涉及到模块之间的协调问题。 (软件系统->子系统->模块) make工具的作用就...
使用autotools工具用configure、make、make install编译安装linux工程的详细步骤
autotools是个系列工具,主要由autoconf、automake、perl语言环境和m4等组成,所包含的命令有5个: 下图是autotools使用的流程图: ...
Nmake
2008年06月22日 76KB 下载

没有更多推荐了,返回首页
最新文章
热门文章
- 编译工具make、gmake、cmake、nmake和Dmake的区别
阅读量:5895
- GetLastError的用法
阅读量:1775
- SetWindowPos讲解
阅读量:1401
- 结构化存储技术介绍
阅读量:961
- SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
阅读量:426