CMake入门(一)

CMake是什么

CMake是一个opensource的软件项目构建管理工具;它允许开发者用一种简单的文本格式进行构建参数的指定。

为什么使用CMake

如果你之前有过维护软件包的构建和安装的经验,你就会对CMake有兴趣。
当前很多项目都可以在Linux下用Makefile和在Windows下用Visual Studio进行编译;这要求开发者在对应的系统下保持构建工具的更新,并且不同系统的构建行为保持一致;如果再引入XCode,这需要更多的构建工具,这样会是一个问题。
如果在此基础上引入可选组件,比如如果系统上有libjpeg,项目就支援JPEG,这会造成更大的麻烦。
CMake提供了一个简单的,易于理解的文件格式来解决上述问题。

如果一个项目有多个开发者参与,或者这个项目有多个目标平台;那么不可避免的需要在多台PC上进行构建,不同的PC在开发环境上会有差异。

  • 自动进行项目构建所需的program、library、header file的查找能力;
  • 在source tree以外进行构建的能力;
  • 为Qt moc,SWIG等自动产生复杂的自定义命令的能力;
  • 在configuration阶段进行可选组件定制的能力;
  • 自动从简单文件文件产生workspace和project的能力;
  • 配置生成静态库/动态库的能力;
  • 自动产生文件依赖,支持并行编译;

CMake的基本语法

build的过程由每个目录下的名为CMakeFileLists.txt的文件组成的一系列文件列表所控制;
CMakeFileLists.txt文件由CMake语句进行项目描述,CMake语句的语法为:

command( args... )
  • command是命令的名字,CMake是不区分大小写的;
  • args是一系列由空格分隔的参数,如果参数中有空格,参数需要用双引号引起来;

变量被引用的格式是${VAR};
多个参数可以使用set来使之构成一个list

set( Foo a b c )

这样设置的结果是Foo的值是 a b c;

CMake可以直接访问系统环境变量和Windows注册表;
访问系统环境变量的语法:

$Env{ARG}

访问Windows注册表:

[HKEY_CURRENT_USER\\Software\\path1\\path2;key]

Hello World

一个简单的CMakeFileLists.txt的例子

project( Hello )
add_executalbe( Hello Hello.c )

一个稍微复杂的例子

cmake_minimum_required( 2.6 )
project( HELLO )

set( HELLO_SRCS Hello.c File2.c File3.c )
if( WIN32 )
    set( HELLO_SRCS ${HELLO_SRCS} WinSupport.c )
esle()
    set( HELLO_SRCS ${HELLO_SRCS} LinuxSupport.c )
endif()

add_executable( HELLO ${HELLO_SRCS} )

# look for the Tcl library
find_library( TCL_LIBRARY 
    NAMES tcl tcl84 tcl83 tcl82 tcl80
    PATHS /usr/lib /usr/local/lib
    )
if( TCL_LIBRARY )
    target_link_library( Hello ${TCL_LIBRARY} )
endif()

如何运行CMake

通常使用两种方式运行CMake

cmake-gui
通过桌面或者命令行运行cmake-gui,打开后UI如下:

[外链图片转存失败(img-ZwXwlARt-1564383408597)(http://7xqdd5.com1.z0.glb.clouddn.com/cmake-gui.png)]
按照如下步骤进行设置:

  1. 图示1, 选择source code所在位置(如果通过cmake-gui path_to_src的方式,source code位置已经设定好);
  2. 图示2, 选择build要产生文件的存放位置;
  3. 图示3,configure;如果是第一次执行configure,会弹出对话框让进行compiler的选择,指定toolchain file;这样设置以后,configure过程会进行,在图示4的区域显示相关option;
  4. 图示4,进行相关参数或者option的设置;
  5. 图示5,generate,产生指定平台的build file(Linux的Makefile或者Visual Studio的sln file);

命令行使用cmake

  1. 切换到准备放置binary file的目录
  2. cmake path_to_src -Doption
  3. make
  4. make install
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,064评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,606评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,011评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,550评论 1 269
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,465评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,919评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,428评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,075评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,208评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,185评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,191评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,914评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,482评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,585评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,825评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,194评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,703评论 2 339

推荐阅读更多精彩内容

  • Written with StackEdit. CMake是什么 CMake是一个opensource的软件项目构...
    peterzen阅读 4,326评论 0 2
  • CMake学习 本篇分享一下有关CMake的一些学习心得以及相关使用。 本文目录如下: [1、CMake介绍] [...
    AlphaGL阅读 12,211评论 11 79
  • 向您的项目添加 C 和 C++ 代码 本文内容 下载 NDK 和构建工具 创建支持 C/C++ 的新项目 构建和运...
    会飞的大象_阅读 3,733评论 0 3
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,700评论 0 10
  • 资源 本文档翻译自官方 cmake turorial 。更新日期:2018年9月27日。译者这里以 windows...
    刘亚彬92阅读 83,755评论 3 12