cmake和makefile区别,Cmake是什么?有什么作用?为什么要使用Cmake?
cmake和makefile区别,Cmake是什么?有什么作用?为什么要使用Cmake?详细介绍
本文目录一览: make makefile cmake qmake都是什么,有什么区别
1. make 是用来执行Makefile的。
2. Makefile是类unix环境下(比如Linux)的类似于批处理的"脚本"文件。其基本语法是: 目标+依赖+命令,只有在目标文件不存在,或目标比依赖的文件更旧,命令才会被执行。由此可见,Makefile和make可适用于任意工作,不限于编程。比如,可以用来管理latex。
3. Makefile+make可理解为类unix环境下的项目管理工具,但它太基础了,抽象程度不高,而且在windows下不太友好(针对visual studio用户),于是就有了跨平台项目管理工具cmake
4. cmake是跨平台项目管理工具,它用更抽象的语法来组织项目。虽然,仍然是目标,依赖之类的,但更为抽象和友好,比如可用math表示数学库,而不需要再具体指定到底是math.dll还是libmath.so,在windows下它会支持生成visual studio的工程,在linux下它会生成Makefile,甚至它还能生成eclipse工程文件。也就是说,从同一个抽象规则出发,它为各个编译器定制工程文件。
5. cmake是抽象层次更高的项目管理工具,cmake命令执行的CMakeLists.txt文件
6. qmake是Qt专用的项目管理工具,对应的工程文件是*.pro,在Linux下面它也会生成Makefile,当然,在命令行下才会需要手动执行qmake,完全可以在qtcreator这个专用的IDE下面打开*.pro文件,使用qmake命令的繁琐细节不用管了。
总结一下,make用来执行Makefile,cmake用来执行CMakeLists.txt,qmake用来处理*.pro工程文件。Makefile的抽象层次最低,cmake和qmake在Linux等环境下最后还是会生成一个Makefile。cmake和qmake支持跨平台,cmake的做法是生成指定编译器的工程文件,而qmake完全自成体系。
CMake和Make之间的区别
CMake的是构建系统的生成器,CMake代表跨平台Make。它可以产生Makefile文件,它可以产生Ninja构建文件,它可以产生KDevelop或XCode的项目,它能产生Visual Studio解决方案。从同一个CMakeLists.txt文件来产生项目。如果你正在编写需要在很多不同的平台上构建的软件那么CMake的往往是一个不错的选择。
写程序大体步骤为:
1.用编辑器编写源代码,如.c文件。
2.用编译器编译代码生成目标文件,如.o。
3.用链接器连接目标代码生成可执行文件,如.exe。
但如果源文件太多,一个一个编译时就会特别麻烦,于是人们想到,为什么不设计一种类似批处理的程序,来批处理编译源文件呢,于是就有了make工具,它是一个自动化编译工具,你可以使用一条命令实现完全编译。但是你需要编写一个规则文件,make依据它来批处理编译,这个文件就是makefile,所以编写makefile文件也是一个程序员所必备的技能。
对于一个大工程,编写makefile实在是件复杂的事,于是人们又想,为什么不设计一个工具,读入所有源文件之后,自动生成makefile呢,于是就出现了cmake工具,它能够输出各种各样的makefile或者project文件,从而帮助程序员减轻负担。但是随之而来也就是编写cmakelist文件,它是cmake所依据的规则。所以在编程的世界里没有捷径可走,还是要脚踏实地的。
原文件--camkelist ---cmake ---makefile ---make ---生成可执行文件
CMake和Make之间的区别
gcc是C语言编译器,而g++则是C++语言编译器,虽然gcc命令也可以用来编译C++语言的源码,但是它最终是要调用g++的。
make工具通过你提供的一个名为Makefile的文件,根据Makefile的内容来决定如何编译源文件。而关于make和cmake的区别,你可以理解为make需要使用Makefile,而cmake是产生Makefile的工具。
Linux下gccg++,make和cmake的区别
gcc是一个C语言编译器,g++是一个C++语言的编译器,这是它们的主要区别,虽然说gcc也可以编译C++代码文件,但实际上是需要g++支持的,gcc编译C++时是要调用g++的。
make是根据Makefile中定义的编译规则来对多个源文件执行编译命令,也就是说它是管理编译规则的工具,并不实际编译文件;而cmake则是可以生成Makefile文件的一个工具,实际上,cmake工具不仅可以生成Makefile,还可以生成Windows平台的VS等开发工具的dsp等工程文件,这样管理项目就更方便了。
Cmake是什么?有什么用?在WINDOWS下如何用
呵呵,我经常做冤大头,觉得自己实在是太没有耐心了,脾气不好,以后要改正呢!
CMake是一个比make更高级的编译配置工具,它可以根据不同平台、不同的编译器,生成相应的Makefile或者vcproj项目。
通过编写CMakeLists.txt,可以控制生成的Makefile,从而控制编译过程。CMake自动生成的Makefile不仅可以通过make命令构建项目生成目标文件,还支持安装(make install)、测试安装的程序是否能正确执行(make test,或者ctest)、生成当前平台的安装包(make package)、生成源码包(make package_source)、产生Dashboard显示数据并上传等高级功能,只要在CMakeLists.txt中简单配置,就可以完成很多复杂的功能,包括写测试用例。
如果有嵌套目录,子目录下可以有自己的CMakeLists.txt。
总之,CMake是一个非常强大的编译自动配置工具,支持各种平台,KDE也是用它编译的,感兴趣的可以试用一下。
准备活动:
(1)安装cmake。
下载地址:http://www.cmake.org/cmake/resources/software.html
根据自己的需要下载相应的包即可,Windows下可以下载zip压缩的绿色版本,还可以下载源代码。
Windows下CMake的使用
(2)运行cmake的方法。(GUI、命令行)
http://www.cmake.org/cmake/help/runningcmake.html
CMake使用步骤:
运行GUI的cmake界面:
cmake-2.8.1-win32-x86\bin\cmake-gui.exe
Windows下CMake的使用
执行Configure:
运行之后,生成了如下文件:
Windows下CMake的使用
生成Makefile:
执行Generate之后生成如下文件:
Windows下CMake的使用
运行make进行编译:
Windows下CMake的使用
编译完成后,在build目录生成Tutorial.exe,运行Tutorial.exe 25就可以看到运行结果:
Windows下CMake的使用
运行make install安装程序:
Windows下CMake的使用
运行make test进行测试:
Windows下CMake的使用
通过cmake tutorial学习CMake配置方法
http://www.cmake.org/cmake/help/cmake_tutorial.html
可以在源代码的Tests/Turorial目录中找到这个手册对应的代码。
Windows下CMake的使用
1、Step1。
(如果不知道如何使用cmake,以及如何使用编译产生的Turorial.exe,可先看下前面“CMake使用步骤”的说明,它以Step4为例详细介绍了使用过程,Step1的配置可能不够完全,比如无法运行make install,无法运行make test,但可以参考。)
简单的程序编译。
(1)运行GUI的cmake,指定要编译的源代码路径和二进制文件路径(会自动创建)。
Windows下CMake的使用
(2)点击Configure,配置成功后,再点击Generate。
配置需要选择合适的编译器,虽然我安装了VC2008,但没有配置成功;选择Unix Makefiles,配置成功,它自动找到了DevC++下的gcc.exe等编译器。
Windows下CMake的使用
(3)在build3目录执行make,就能够编译生成Turorial.exe了。
D:\Projects\Lab\testngpp\cmake-2.8.1\Tests\Tutorial\Step1\build3>make
Linking CXX executable Tutorial.exe
[100%] Built target Tutorial
可以运行一下Turorial.exe:
D:\Projects\Lab\testngpp\cmake-2.8.1\Tests\Tutorial\Step1\build3>Tutorial.exe
Tutorial.exe Version 1.0
Usage: Tutorial.exe number
D:\Projects\Lab\testngpp\cmake-2.8.1\Tests\Tutorial\Step1\build3>Tutorial.exe 4
The square root of 4 is 2
2、Step2
把子目录编译为库,并且链接到最终的可执行文件。
include_directories ("${PROJECT_SOURCE_DIR}/MathFunctions")
add_subdirectory (MathFunctions) # 使得子目录MathFunctions也能被编译
# add the executable
add_executable (Tutorial tutorial.cxx)
target_link_libraries (Tutorial MathFunctions)
产生makefile:
在GUI上点击Configure,之后Generate还是灰色,再次点击Configure,Generate就可以点击了。
编译:
没装gcc能用cmake吗?
cmake是编译整合工具,等于把多个gcc编译写在一个脚本里,并且带有相互依赖关系,大大方便了程序的编译和发布步骤,cmake里是否使用gcc这是看你用什么写程序,用什么写的就用什么编译,gcc只是真的c程序
make这一类工具是根据makefile来执行预定的编译器指令和其它相关命令;cmake也是一样,它不光能用gcc,还应该能用其它的编译器,如vs的cl.exemake可以理解成是个办事文员,程序员写好了代码,就交待他要怎么怎么编译,为了生成一个项目,都需要怎么怎么做;它和编译器没有必然关系,不过有了它,程序员可以不用每次更新了自己的代码时,从头到脚每个文件都重新编译一次而已。makefile不一定与某种编译器挂钩,因为它不一定使用该编译器,前面说过一次了第一个编译器,……,对这个感兴趣的话可以去看一下编译器实现原理;就C语言来说,C语言是在贝尔电话实验室中诞生的,当然很有可能,第一个C编译器诞生在那个实验室,而且因为没有C语言,它的开发使用了其它更早出现的高级语言如BASIC/algo……甚至于是汇编语言
C和C++混编的makefile编写
写makefile这种东西呢,实在很伤神。不如你试试cmake来生成makefile吧。kde就是用它来构建项目的。简单易上手,半天就会用,研究两天就是半吊子专家了。。。
shibixiao说的没错,make程序才不管你是什么语言文件,只要你指定的更新规则没问题,C和C++分别制定,就不会有错。如果出错,多半是代码本身的问题
你看一下GNUmake中文手册吧,网上有的
C++是兼容C的,所以你只需要全部按C++的方式编写即可。
makefile 不区分c和c++,只要你编译给的参数对了就可以了,比如c你用gcc编译,那么c++你可以用g++就好了,makefile实际上并不知道你是编译c还是c++
Cmake是什么?有什么作用?为什么要使用Cmake?
CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。
它能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。只是 CMake 的组态档取名为 CMakeLists.txt。Cmake并不直接建构出最终的软件,而是产生标准的建构档(如 Unix 的 Makefile 或 Windows Visual C++ 的 projects/workspaces),然后再依一般的建构方式使用。这使得熟悉某个集成开发环境(IDE)的开发者可以用标准的方式建构他的软件,这种可以使用各平台的原生建构系统的能力是 CMake 和 SCons 等其他类似系统的区别之处。
CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。作用是他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。
只是 CMake 的组态档取名为 CMakeLists.txt。Cmake 并不直接建构出最终的软件,而是产生标准的建构档(如 Unix 的 Makefile 或 Windows Visual C++ 的 projects/workspaces),然后再依一般的建构方式使用。
这使得熟悉某个集成开发环境(IDE)的开发者可以用标准的方式建构他的软件,这种可以使用各平台的原生建构系统的能力是 CMake 和 SCons 等其他类似系统的区别之处。
CMake是为了解决美国国家医学图书馆出资的Visible Human Project专案下的Insight Segmentation and Registration Toolkit (ITK) 软件的跨平台建构的需求而创造出来的,其设计受到了Ken Martin开发的pcmaker所影响。pcmaker当初则是为了支持Visualization Toolkit这个开放源代码的三维图形和视觉系统才出现的,VTK也采用了CMake。
CMake和CCMake的区别
./configure就是执行你当前目录下一个名叫configure的脚本,由它生成Makefile,有了Makefile之后,一般来说就可以通过make进行编译,makeinstall进行安装cmake就是一个与make同级别的编译工具,只不过它依靠的不是Makefile作为编译规则,而是根据CMakeLists.txt来编译的。