文档章节

Linux系统下CMake的安装和使用

牛牛牛大棚
 牛牛牛大棚
发布于 2016/02/17 11:11
字数 1369
阅读 498
收藏 2

一、介绍

       “CMake”是“cross platform make”的缩写,是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装或编译过程。Cmake 并不直接建构出最终的软件,而是产生标准的建构档,如 Unix 的 makefile 或 Windows的 projects/workspaces,然后再依一般的建构方式使用。在输出makefile或者project文件的同时,能测试编译器所支持的C++特性。CMake 的组态档取名为 CmakeLists.txt,每个目录一个。

       cmake的特点主要有:

1、开放源代码,使用类BSD许可发布。http://cmake.org/HTML/Copyright.html

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在工具链中没有libtool。

6、可扩展,可以为cmake编写特定功能的模块,扩充cmake功能。

 

二、安装

1、安装包安装

       官网下载地址:http://wwwNaNake.org/HTML/Download.html

(1)下载CMake的安装包,如cmake-3.4.3 tar.gz。

(2) 解压缩:tar xvf cmake-3.4.3 tar.gz

(3) 进入解压目录:cd cmake-3.4.3

(4) 如果未安装过CMake,则执行如下操作:

./bootstrap

         make

         make install

         如果安装过CMake,并进行新版本的安装,则执行如下操作:

cmake

         make

         make install

 

2、 在线安装

       sudo apt-get install cmake

 

三、使用

CMake的所有的语句都写在CMakeLists.txt 的文件中。当CMakeLists.txt文件确定后,可以用ccmake命令对相关的变量值进行配置。这个命令必须指向CMakeLists.txt所在的目录。配置完成之后,应用cmake命令生成相应的makefile(在Unix like系统下)或者 project文件(指定用window下的相应编程工具编译时)。

其基本操作流程为:

$> ccmake directory

$> cmake directory

$> make

其中directory为CMakeLists.txt所在目录;

第一条语句用于配置编译选项,如VTK_DIR目录 ,一般这一步不需要配置,直接执行第二条语句即可,但当出现错误时,这里就需要认为配置了,这一步才真正派上用场;

第二条命令用于根据CMakeLists.txt生成Makefile文件;

第三条命令用于执行Makefile文件,编译程序,生成可执行文件。

 

四、常用指令

1、PROJECT(工程名 [CXX] [C] [Java])

    用于定义工程名字,并可以指定工程支持的语言,支持的语言列表可以忽略,默认支持所有语言。这条指令隐式定义了两个cmake变量:

<projectname>_BINARY_DIR(二进制文件保存路径)

<projectname>_SOURCE_DIR(源代码路径)

cmake系统预定义了PROJECT_BINARY_DIR和PROJECT_SOURCE_DIR,其值与上述两个变量对应。

 

2、SET(变量名 变量值)

SET(VAR [VALUE] [CACHE TYPEDOCSTRING [FORCE]])

       用来显示的定义变量,如SET(SRC_LIST main.cpp a.cpp b.cpp)。在引用变量时使用${},如${SRC_LIST},但在IF控制语句中引用变量是直接使用变量名。

 

3、MESSAGE(消息类型 消息内容)

MESSAGE([SEND_ERROR | STATUS | FATAL_ERROR] "message to display")

       用于向终端输出用户定义的信息,包含了三种类型:

SEND_ERROR,产生错误,生成过程被跳过;

SATUS,输出前缀为—的信息;

FATAL_ERROR,立即终止所有cmake过程。

 

4、ADD_EXECUTABLE(可执行文件名 生成该可执行文件的源文件)

ADD_EXECUTABLE(main ${SRC_LIST})

用于生成一个文件名为main的可执行文件,相关的源文件是SRC_LIST中定义的源文件列表。

 

5、ADD_LIBRARY(动态/静态链接库名 生成动态/静态链接库的源文件)

ADD_LIBRARY(core SHARED ${ SRC_LIST })

ADD_LIBRARY(core STATIC ${ SRC_LIST })

用于生成一个文件名为core的动态/静态链接库,相关的源文件是SRC_LIST中定义的源文件列表。

 

6、SET_TARGET_PROPERTIES(目标 PROPERTIES 选项 动态/静态链接库名)

       SET_TARGET_PROPERTIES(core PROPERTIES OUTPUT_NAME "core_1")

       用于生成core_1动态/静态链接库。

SET_TARGET_PROPERTIES(core PROPERTIESVERSION 1.2 SOVERSION 1)

       用于设置动态链接库版本号,VERSION指代动态库版本,SOVERSION指代API版本。

 

7、ADD_SUBDIRECTORY(子目录名字)

       ADD_SUBDIRECTORY(source_dir [binary_dir] [EXCLUDE_FROM_ALL])

       用于向当前工程添加存放源文件的子目录,并可以指定中间二进制和目标二进制存

放的位置。EXCLUDE_FROM_ALL参数的含义是将这个目录从编译过程中排除。

 

8、SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR} /bin)

用于更改生成的可执行文件路径。

 

9、SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR} /lib)

用于更改生成的库文件路径。

 

10、INCLUDE_DIRECTORIES(追加标志 头文件路径)

       INCLUDE_DIRECTORIES([AFTER|BEFORE] [SYSTEM]dir1 dir2 ...)

       用于引入头文件搜索路径,路径之间用空格分隔,如果路径中包含空格,则路径使用双引号。

       可以通过两种方式来进行控制搜索路径添加的方式:

(1)CMAKE_INCLUDE_DIRECTORIES_BEFORE,通过SET这个cmake变量为on,可以将添加的头文件搜索路径放在已有路径的前面。

(2)通过AFTER或者BEFORE参数,也可以控制是追加还是置前。

 

11、LINK_DIRECTORIES(库文件路径)

       LINK_DIRECTORIES(directory1 directory2 ...)

       用于添加非标准的共享库搜索路径。

 

12、TARGET_LINK_LIBRARIES(需要连接的文件 动态/静态链接库)

       TARGET_LINK_LIBRARIES(target library1 <debug | optimized> library2...)

设置要连接库文件的名称。


© 著作权归作者所有

共有 人打赏支持
牛牛牛大棚
粉丝 0
博文 11
码字总数 11265
作品 0
苏州
程序员
私信 提问
使用Cmake生成OA信用盘平台出租跨平台项目编译解决方案

项目最近OA信用盘平台出租 haozbbs.com Q1446595067 有需求在windows下面运行,我花了几周时间将linux的服务器移植到windows下面,目前已经能够正常运行服务器,目前又有了新需求,两边的代码...

tutuoia
07/10
0
0
cmake命令 安装、用法简介

前言: cmake是kitware公司以及一些开源开发者在开发几个工具套件(VTK)的过程中所产生的衍生品。后来经过发展,最终形成体系,在2001年成为一个独立的开放源代码项目。其官方网站是www.cmake...

烦恼的大胖
2011/05/25
0
4
使用Cmake生成跨极速赛车平台出租平台项目编译解决方案

项目最近有需求在windows下面运行,我花了几周时间将linux的服务器移植到windows下面,目前已经能够正常运行服务器,目前又有了新需求,两边的代码结构和组织是分开的,因此为了两边能够同步...

inuuns
07/10
0
0
CMake 3.2.1 发布,自动化构建系统

CMake 3.2.1 发布,此版本更新内容如下: The release was packaged with CPack which is included as part of the release The .sh files are self extracting gziped tar files To install......

oschina
2015/03/12
2.9K
4
CMake 3.0 发布,自动化建构系统

CMake 官方发布新的v3.0版本,此版本发布包括 CPack,更多更新内容请看 ChangeLog。 源代码下载: Platform Files Unix/Linux Source (has \n line feeds) cmake-3.0.0.tar.gz cmake-3.0.0....

clouddyy
2014/06/11
4.9K
6

没有更多内容

加载失败,请刷新页面

加载更多

RestClientUtil和ConfigRestClientUtil区别说明

RestClientUtil directly executes the DSL defined in the code. ConfigRestClientUtil gets the DSL defined in the configuration file by the DSL name and executes it. RestClientUtil......

bboss
55分钟前
11
0

中国龙-扬科
昨天
2
0
Linux系统设置全局的默认网络代理

更改全局配置文件/etc/profile all_proxy="all_proxy=socks://rahowviahva.ml:80/"ftp_proxy="ftp_proxy=http://rahowviahva.ml:80/"http_proxy="http_proxy=http://rahowviahva.ml:80/"......

临江仙卜算子
昨天
9
0
java框架学习日志-6(bean作用域和自动装配)

本章补充bean的作用域和自动装配 bean作用域 之前提到可以用scope来设置单例模式 <bean id="type" class="cn.dota2.tpye.Type" scope="singleton"></bean> 除此之外还有几种用法 singleton:......

白话
昨天
8
0
在PC上测试移动端网站和模拟手机浏览器的5大方法

总结很全面,保存下来以备不时之需。原文地址:https://www.cnblogs.com/coolfeng/p/4708942.html

kitty1116
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部