CMake之初级教程.doc_第1页
CMake之初级教程.doc_第2页
CMake之初级教程.doc_第3页
CMake之初级教程.doc_第4页
CMake之初级教程.doc_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

CMake之初级教程(VTK)的过程中所产生的衍生品。后来经过发展,最终形成体系,在2001年成为一个独立的开放源代码项目。其*是,可以通过访问*来获得更多关于cmake的信息,而且目前官方的英文文档比以前有了很大的改进,可以作为实践中的参考手册。cmake的流行离不开KDE4的选择。KDE开发者在使用autotools近10年之后,终于决定为KDE4项目选择一个新的工程构建工具。之所以如此,用KDE开发者们自己话来说,就是:只有少数几个“编译专家”能够掌握KDE现在的构建体系。在经历了unsermake,scons以及cmake的选型和尝试之后,KDE4最终决定使用cmake作为自己的构建系统。在迁移过程中,进展一场的顺利,并获得了cmake开发者的支持。所以,目前的KDE4开发版本已经完全使用cmake来进行构建。随着cmake 在KDE4项目中的成功,越来越多的项目正在使用cmake作为其构建工具,这也使得cmake正在成为一个主流的构建体系。一、为何要使用项目构建工具?为何要使用cmake和autotools之类的项目构建工具? 我想,这恐怕是刚刚接触软件项目的人最应该问的问题之一了。“Hello, world!“这个最经典的程序相信我们每个人都写过。无论在什么平台下,编译和运行这个程序都仅需要非常简单的操作。但事实上,hello,world最多只能算是一个实例程序,根本算不上一个真正的软件项目。任何一个软件项目,除了写代码之外,还有一个更为重要的任务,就是如何组织和管理这些代码,使项目代码层次结构清晰易读,这对以后的维护工作大有裨益。使想一下,如果把一个像KDE4那么大的项目像hello world那样,把全部代码都放到一个main.cpp文件中,那将会是多么恐怖的一件事情。别说KDE4,就是我们随便一个几千行代码的小项目,也不会有人干这种蠢事。决定代码的组织方式及其编译方式,也是程序设计的一部分。因此,我们需要cmake和autotools这样的工具来帮助我们构建并维护项目代码。看到这里,也许你会想到makefile,makefile不就是管理代码自动化编译的工具吗?为什么还要用别的构建工具?其实,cmake和autotools正是makefile的上层工具,它们的目的正是为了产生可移植的makefile,并简化自己动手写makefile时的巨大工作量。如果你自己动手写过makefile,你会发现,makefile通常依赖于你当前的编译平台,而且编写makefile的工作量比较大,解决依赖关系时也容易出错。因此,对于大多数项目,应当考虑使用更自动化一些的cmake或者autotools来生成makefile,而不是上来就动手编写。总之,项目构建工具能够帮我们在不同平台上更好地组织和管理我们的代码及其编译过程,这是我们使用它的主要原因。二、cmake的主要特点:cmake和autotools是不同的项目管理工具,有各自的特点和用户群。存在即为合理,因此我们不会对两者进行优劣比较,这里只给出cmake的一些主要特点:1.开放源代码,使用类 BSD 许可发布。2.跨平台,并可生成 native 编译配置文件,在 Linux/Unix 平台,生成 makefile,在 苹果平台,可以生成 xcode,在 Windows 平台,可以生成 MSVC 的工程文件。3.能够管理大型项目,KDE4 就是最好的证明。4.简化编译构建过程和编译过程。Cmake 的工具链非常简单:cmake+make。5.高效率,按照 KDE 官方说法,CMake 构建 KDE4 的 kdelibs 要比使用 autotools 来 构建 KDE3.5.6 的 kdelibs 快 40%,主要是因为 Cmake 在工具链中没有 liool。6.可扩展,可以为 cmake 编写特定功能的模块,扩充 cmake 功能。三、安装cmake安装cmake 对任何用户而言都不该再成为一个问题。几乎所有主流的Linux发行版的源中都包含有cmake的安装包,直接从源中添加即可。当然,也可以在*下载源代码自行编译安装。对于Windows和Mac用户,cmake的*上有相应的安装包,下载安装即可,无须赘述。注:为了能够测试本文中的实例程序,如果读者的Linux系统中所带的cmake版本低于2.6,请从官网下载2.6版本或以上的源代码进行编译并安装。在linux下安装cmake首先下载源码包/cmake/resources/software.html Unix/Linux用户下载cmake-2.*.tar.gz Windows用户的下载文件有3种,可任选一种: (1)Windows Source (has rn line feeds) cmake-2.8.4.zip CMake的源码文件里面含有测试实例 (2)Windows (Win32 Installer) cmake-2.8.4-win32-x86.exe CMake的安装文件,直接安装即可 (3)Windows ZIP cmake-2.8.4-win32-x86.zip CMake的绿色版软件,免安装。随便找个目录解压缩tar -xzvf cmake-2.*.tar.gzcd cmake-2.*依次执行:./bootstrapmakemake installcmake 会默认安装在 /usr/local/bin 下面四、从“Hello, world!”开始了解cmake的基本原理并在系统中安好cmake后,我们就可以用cmake来演示那个最经典的”Hello, world!”了。第一步,我们给这个项目起个名字就叫HELLO吧。因此,第一部为项目代码建立目录hello,与此项目有关的所有代码和文档都位于此目录下。第二步,在hello目录下建立一个main.c文件,其代码如下:#includeint main(void)printf(”Hello,Worldn”);return 0;第三步,在hello目录下建立一个新的文件CMakeLists.txt,它就是cmake所处理的“代码“。其实,使用cmake管理项目本身也是在编程,所以称之为“代码(或脚本)”并不为过。在CMakeLists.txt文件中输入下面的代码(#后面的内容为代码行注释): CMAKE_MINIMUM_REQUIRED(VERSION 2.6)#cmake最低版本需求,不加入此行会受到警告信息PROJECT(HELLO) #项目名称AUX_SOURCE_DIRECTORY(. SRC_LIST) #把当前目录(.)下所有源代码文件和头文件加入变量SRC_LISTADD_EXECUTABLE(hello $SRC_LIST)#生成应用程序 hello (在windows下会自动生成hello.exe)至此,整个hello项目就已经构建完毕,可以进行编译了。第四步,编译项目。为了使用外部编译方式编译项目,需要先在目录hello下新建一个目录build(也可以是其他任何目录名)。现在,项目整体的目录结构为:hello/| CMakeLists.txt| build / main.c在windows下,cmake提供了图形界面,设定hello为source目录,build为二进制目录,然后点击configure即可开始构建。编译可以在VC+2008下进行,具体见后面的详述。在linux命令行下,首先进入目录build,然后运行命令(注:后面的“.”不可缺少):cmake .该命令使cmake检测编译环境,并生成相应的makefile。接着,运行命令make进行编译。编译后,生成的所有中间文件和可执行文件会在build目录下。下面是我在ubuntu上的运行过程:$ lshello$ cd hello/build/$ ls$ cmake . The C compiler identification is GNU The CXX compiler identification is GNU Check for working C compiler: /usr/bin/gcc Check for working C compiler: /usr/bin/gcc works Detecting C compiler ABI info Detecting C compiler ABI info - done Check for working CXX compiler: /usr/bin/c+ Check for working CXX compiler: /usr/bin/c+ works Detecting CXX compiler ABI info Detecting CXX compiler ABI info - done Configuring done Generating done Build files have been written to: /home/kermit/Project/cmake/hello/build$ makeScanning dependencies of target hello100% Building C object CMakeFiles/hello.dir/main.c.oLinking C executable hello100% Built target hello$ lsCMakeCache.txt CMakeFiles cmake_install.cmake hello Makefile$ ./helloHello,World上面,我们提到了一个名词,叫外部编译方式。其实,cmake还可以直接在当前目录进行编译,无须建立build目录。但是,这种做法会将所有生成的中间文件和源代码混在一起,而且cmake生成的makefile无法跟踪所有的中间文件,即无法使用”make distclean”命令将所有的中间文件删除。因此,我们推荐建立build目录进行编译,所有的中间文件都会生成在build目录下,需要删除时直接清空该目录即可。这就是所谓的外部编译方式。下面主要介绍在Windows平台下CMake的编译和最常用的三个命令,分别是cmake_minimum_required; project; add_executable等。CMake是个好东西,在使用VTK, ITK, IGSTK, OpenCV, DCMTK等开源工具包时,是离不开CMake的,甚至有时你使用 FLTK , Qt等界面开发工具时,也经常会看到CMake,你会发现在好多目录下会有一个文件”CMakeLists.txt”,这个文件就是使用CMake构建工程环境的重要文件。了解一点关于CMake的内容,对使用以上提到的一些开源工具包是灰常有帮助的,而且你会发现,CMake用久了,你会觉得它是很可爱很好用的东西。废话少说,结合我个人在使用CMake的过程中,把CMake的一些知识梳理一下,希望对大家有所帮助,如果有不对的地方,请你留言或者发邮件告诉我(水灵,msn: ,QQ: 348774226)。如果你检索到了我关于CMake的这些文章时,我是假定你已经对CMake的作用有所了解。下面我们从最简单的入手来看看CMake怎么使用:写一个HelloCMake.cpp文件,里面就简单地输出一行字符串:”Study CMake Together - Hello CMake!”,一起看看怎么用CMake来构建工程。首先,在使用CMake之前请先从CMake网站()上下载最新版的安装文件并在你的机子上安装,你也可以下载CMake源码,然后在你机子上编译;对于使用CMake的童鞋,建议用傻瓜式安装方式就行了(这里所做的例子全是在Windows 7平台上的。)然后,还要确保你的机子已经安装了一种编译器,我机子上安装的是VS2008。你也可以选择其他编译器,建议用VS2008或以上版本的,个人觉得比较好用。接着在你机子的某个盘里建一个新的文件夹,如我这里的完整路径是:D:CMakeCMake-StudyHelloCMake; 然后在HelloCMake文件夹里建立一个HelloCMake.cpp文件,里面的代码如下:#include int main()std:coutStudy CMake Together - Hello CMake!设置为启动工程,也不会出现如图(6)所示的界面。好,这些比较琐碎的东西介绍完,我们一起来看看CMakeLists.txt里面的代码表示什么意思,争取每句代码都作解释,如果有不对的地方,一定要告诉我!图(5)图(6)把CMakeLists.txt里的内容再罗列出来:1. cmake_minimum_required(VERSION 2.6)2. project(HelloCmake)3. add_executable(HelloCMake hellocmake.cpp)第1行,cmake_minimum_required(VERSION 2.6)这是对CMake版本的要求,基本上每个CMakeLists.txt文件里都会有这句代码,cmake_minimum_required是cmake里的命令,可大写小写。VERSION这个关键字必须是大写,而且不能省略;2

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论