一起学习CMake – 01
一起学习CMake – 01
本节介绍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: shuiling119@hotmail.com,QQ: 348774226)。
如果你检索到了我关于CMake的这些文章时,我是假定你已经对CMake的作用有所了解。下面我们从最简单的入手来看看CMake怎么使用:写一个HelloCMake.cpp文件,里面就简单地输出一行字符串:”Study CMake Together - Hello CMake!”,一起看看怎么用CMake来构建工程。
首先,在使用CMake之前请先从CMake网站(http://www.cmake.org)上下载最新版的安装文件并在你的机子上安装,你也可以下载CMake源码,然后在你机子上编译;对于使用CMake的童鞋,建议用傻瓜式安装方式就行了(这里所做的例子全是在Windows 7平台上的。)
然后,还要确保你的机子已经安装了一种编译器,我机子上安装的是VS2008。你也可以选择其他编译器,建议用VS2008或以上版本的,个人觉得比较好用。
接着在你机子的某个盘里建一个新的文件夹,如我这里的完整路径是:D:\CMake\CMake-Study\HelloCMake; 然后在HelloCMake文件夹里建立一个HelloCMake.cpp文件,里面的代码如下:
#include <iostream>
int main()
{
std::cout<<"Study CMake Together - Hello CMake!"<<std::endl;
return 0;
}
然后在HelloCMake文件夹里建立一个CMakeLists.txt文件,注意文件名不能是别的,必须叫这个名字。里面的内容如下:
cmake_minimum_required(VERSION 2.6)
project(HelloCmake)
add_executable(HelloCMake hellocmake.cpp)
接着在HelloCMake的同级目录里建立一个新的文件夹,就叫做HelloCMake-bin,在我机子上的完整路径是:D:\CMake\CMake-Study\HelloCMake-bin,你可以针对自己的目录路径对号入座。
然后打开CMake程序,界面如图(1):
图(1)
图(2)
接着把包含CMakeLists.txt和HelloCMake.cpp文件的完整路径给”where is the source code”,把最后建立的HelloCMake-bin目录的完整路径给”where to build the binaries”,然后按Cofigure,界面如图(2)。
Configure完了以后,再按Generate,直到所有的红色选项都变成灰色为止。界面如图(3)。然后打开HelloCMake-bin,你会发现原来空的文件夹里面自动生成了好多文件,如图(4)。
图(4)
到此为止,工程构建完成,打开HelloCMake-bin目录下的HelloCMake.sln,里面有三个工程,分别是:ALL_BUILD;HelloCMake;ZERO_CHECK。这三个工程的大概作用如下(个人理解而已),HelloCMake就不用说了,自己要建立的那个工程;ALL_BUILD是管理整个项目的工程;ZERO_CHECK是实时监视CMakeLists.txt文件变化的工程,一旦CMakeLists.txt里的内容发生了任何变化,ZERO_CHECK就会告诉编译器要重新构建整个工程环境。所以,你可以先把工程关掉,打开CMakeLists.txt文件,更改里面的内容以后,把根据以上说的步骤走一遍CMake;你也可以在编译器环境(如VS2008)中更改CMakeLists.txt文件,然后直接F7编译工程。如果你选择后者,你会发现如图(5)所示的现象发生。
因为你改变了CMakeLists.txt的内容,工程的环境要重新构建、设置。所以你必须加载新的工程环境设置。点Yes,然后点Reload。重新加载设置过的工程环境。
另外一个经常看某些童鞋问的,就是当弹出图(6)所示的界面时要怎么办?能怎么办?界面上提示已经灰常清楚了,指定exe的路径给它,然后点OK就可以了;出现这种情况的原因是你把没有生成exe可执行文件的工程设为启动工程了,如图(6)所示,你会发现ALL_BUILD这个工程名字是黑体显示的,表示它是启动工程;或者你把生成exe可执行文件的工程,如这里的HelloCMake右击->设置为启动工程,也不会出现如图(6)所示的界面。
好,这些比较琐碎的东西介绍完,我们一起来看看CMakeLists.txt里面的代码表示什么意思,争取每句代码都作解释,如果有不对的地方,一定要告诉我!

图(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.6就是CMake的版本号,现在的版本是2.8.3。
第2行,project(HelloCmake),project也是CMake的命令,里面的参数HelloCMake是你要生成的工程的名字,换句话说就是生成的***.sln或者***.dsw等工程项目文件的名字。
第3行,add_executable(HelloCMake hellocmake.cpp),add_executable同样是CMake的命令,链接有关的源文件,然后生成exe可执行文件,这是这个命令的作用。第一个参数是生成的exe文件的文件名,一般与project里的工程名一致,这样编译生成的文件就分别是HelloCMake.sln和HelloCMake.exe,当然也可以不一样。Add_executable()后面的是一个参数列表,可带多个要编译的文件名,中间以空格或回车等隔开,如可以加入:
add_executable(HelloCMake hellocmake.cpp hellocmake.h)
这样就把CMake里最常用的三个命令介绍完了,分别是cmake_minimum_required; project; add_executable等,关于这三个命令的完整参数列表可以参考http://www.cmake.org网站上的东西,也可以从http://vislabproject.googlecode.com/svn/trunk/CMake/下载CMake入门的一些英文资料。
转自:http://blog.163.com/jacky_ling0/blog/static/1373925712011072375418/
一起学习CMake – 01的更多相关文章
- 一起学习CMake – 02
本节介绍如何用CMake来设置软件的版本号 在<一起学习CMake - 01>中我们看到了如何用CMakeLists.txt来构建一个最简单的工程,这一节里我们一起来看看如何用CMake对 ...
- 一起学习CMake – 03
这一节我们就一起来看看如何用CMake来链接自己写的lib库,如何进行这些库文件的管理. 一个团队共同开发软件时,一般都是分模块进行作业的,每个人负责整个软件中的一部分,然后再整合成一个完整的软件系统 ...
- 软件测试之loadrunner学习笔记-01事务
loadrunner学习笔记-01事务<转载至网络> 事务又称为Transaction,事务是一个点为了衡量某个action的性能,需要在开始和结束位置插入一个范围,定义这样一个事务. 作 ...
- C++ GUI Qt4学习笔记01
C++ GUI Qt4学习笔记01 qtc++signalmakefile文档平台 这一章介绍了如何把基本的C++只是与Qt所提供的功能组合起来创建一些简单的图形用户界面应用程序. 引入两个重要概 ...
- SaToken学习笔记-01
SaToken学习笔记-01 SaToken版本为1.18 如果有排版方面的错误,请查看:传送门 springboot集成 根据官网步骤maven导入依赖 <dependency> < ...
- Redis:学习笔记-01
Redis:学习笔记-01 该部分内容,参考了 bilibili 上讲解 Redis 中,观看数最多的课程 Redis最新超详细版教程通俗易懂,来自 UP主 遇见狂神说 1. Redis入门 2.1 ...
- NodeJS 学习总结 01 安装配置
1 安装NodeJS 具体参考已发布的文章Ubuntu学习总结-07 Nodejs和npm的安装 2 使用淘宝 NPM 镜像 国内直接使用 npm 的官方镜像是非常慢的,这里推荐使用淘宝 NPM 镜像 ...
- OpenGL 学习笔记 01 环境配置
以下教程仅适用于Mac下的Xcode编程环境!其他的我也不会搞. 推荐教程:opengl-tutorial 本项目Github网址 OpenGL太可怕了...必需得把学的记下来,不然绝壁 ...
- PHP 学习笔记 01
例子: 为什么要学PHP 主观原因: 前段时间在学校处理了毕业的一些事情,回到上海后开始了找工作的旅程.意向工作是WPF开发或者ASP.NET 作为后端的WEB开发. 陆陆续续一直在面试,其中有一家公 ...
随机推荐
- kvm网络虚拟化管理
1. Linux Bridge网桥管理 一个网桥上添加多个虚拟机,虚拟机之间是可以相互通信的的,同时虚拟机也都可以通外网. kvm的网桥管理可以通过brctl命令 [root@localhost ~] ...
- Re:从零开始的Linux之路(基础篇)
基于 Red Hat Enterprise Linux 7.5 或者 CentOS 7.4 Linux的命令一定遵循以下格式:command指令 [-options]选项 parameter1参数 ...
- 剑指Offer(书):反转链表
题目:输入一个链表,反转链表后,输出新链表的表头. 分析:要分清他的前一个节点和后一个节点,开始的时候前节点为null,后节点为head.next,之后,反转. public ListNode Rev ...
- 使用Lucene的java api 写入和读取索引库
import org.apache.commons.io.FileUtils;import org.apache.lucene.analysis.standard.StandardAnalyzer;i ...
- DDoS 攻击与防御:从原理到实践(上)
欢迎访问网易云社区,了解更多网易技术产品运营经验. 可怕的 DDoS 出于打击报复.敲诈勒索.政治需要等各种原因,加上攻击成本越来越低.效果特别明显等趋势,DDoS 攻击已经演变成全球性的网络安全威胁 ...
- Oracle跟踪分析数据库启动的各个阶段
目录 启动到nomount状态 设置trace 启动数据库到mount状态并打开 查阅trace 查阅trace的另外方法 v$diag_info 视图 演示如下: 启动到nomount状态 SYS@ ...
- python算法-栈
定义: 栈(stack)又名堆栈,它是一种运算受限的线性表.其限制是仅允许在表的一端进行插入和删除运算.这一端被称为栈顶,相对地,把另一端称为栈底.向一个栈插入新元素又称作进栈.入栈或压栈,它是把新元 ...
- HDU 4417 Super Mario(划分树问题求不大于k的数有多少)
Super Mario Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- HDU——1195Open the Lock(双向BFS)
Open the Lock Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) To ...
- 强大!不懂html也来学网抓(xmlhttp/winhttp+fiddler)
http://club.excelhome.net/thread-1159783-1-1.html 学习html强力推荐此网站:http://www.w3school.com.cn/ ,绝对权威 交流 ...