文档章节

Linux系统下CMake的安装和使用

牛牛牛大棚
 牛牛牛大棚
发布于 2016/02/17 11:11
字数 1369
阅读 396
收藏 2
点赞 2
评论 0

一、介绍

       “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
苏州
程序员
part01_Linux下使用Cmake构建工程

一、安装Cmake 1.下载cmake-3.11.1.tar.gz:https://cmake.org/download/ 2.把 cmake-3.11.1.tar.gz放到任意临时目录(Cmake默认安装在:/usr/local/中),查看其权限如果没有权限直接更改权限...

IT魔幻师 ⋅ 05/09 ⋅ 0

Ubuntu上交叉编译opencv及opencv_contrib并移植到ARM板之一

零、环境准备: 编译环境:Ubuntu-14.04 交叉编译工具链:arm-linux-gnueabi-4.5.1 目标机器:粤嵌GEC210开发板S5PV210(Cortex-a8) opencv库:opencv-3.2.0(源码),解压至某一目录 open...

qq_30155503 ⋅ 04/18 ⋅ 0

CentOS 7 编译安装 MySQL-5.7.9

CentOS 7 编译安装 MySQL-5.7.9 本文主要来自https://typecodes.com/web/centos7compilemysql.html 实验环境 VMware 12中最小化安装的CentOS 7 x64 CentOS 7 配置为 2cpu 2G内存(原来分配1...

lizer2016 ⋅ 2015/12/03 ⋅ 0

在eclipse中使用cmake

环境:MAC OS X 11 (使用Linux应该也一样) eclipse版本: Oxygen.3a Release (4.7.3a) cmake版本: 3.11 笔者使用的方法是通过插件 cmake4eclipse 可以在下面地址找到 https://github.com/15k...

街角的小丑 ⋅ 05/07 ⋅ 0

OpenCV安装(Linux)相关问题及解决

一、OpenCV的安装: 选择Ubuntu14.04LFS + opencv2.4.11 ,具体参考官方提供的安装教程 1.先安装个叫cmake 的工具,使用 sudo apt-get install cmake ,安装的应该是最新版;另外可以安装cma...

Comma_H ⋅ 05/14 ⋅ 0

CMake 3.11.2 发布,自动化构建系统

CMake 3.11.2 已发布,CMake 是一个跨平台的自动化建构系统,它使用一个名为 CMakeLists.txt 的文件来描述构建过程,可以产生标准的构建文件,如 Unix 的 Makefile 或Windows Visual C++ 的 ...

clouddyy ⋅ 05/18 ⋅ 0

10km/feature_se

feature_se(feature search engine) (人脸)特征内存搜索引擎(feature search engine),提供高速的人脸特征相似度比对搜索/排序,支持多线程并行搜索,适用于百万级以上人脸库的快速搜索。(C+...

10km ⋅ 04/24 ⋅ 0

Core Linux折腾(三)

目录 Core Linux折腾(一)[一] Core Linux折腾(一)[二] Core Linux折腾(二) Core Linux折腾(三) Core Linux 操作文档(一) 首先我们需要做一些预备工作 安装cmake 和 gcc 以及Apach...

Pulsar-V ⋅ 01/10 ⋅ 0

OpenCV使用CMake和MinGW的编译安装及其在Qt配置运行

软件环境 Windows-10-64bit Qt-5.9.3 MinGW-5.3.0-32bit CMake-3.9.2 OpenCV-3.3.1 / 3.4.1(适用) 编译好的 OpenCV(MinGW 版): Github . huihut/OpenCV-MinGW-Build OpenCV 的 MSVC 版及 ......

数据为王 ⋅ 05/21 ⋅ 0

WebAssembly环境搭建

# 开发者指导 本页面提供一步一步的操作将一个简单的程序编译成webassembly ## 前提要求 为了编译成webAssembly,需要提前安装一些工具: + Git。在Linux和OSX下已自带了Git,在Windows下需要...

scarecrowlxb ⋅ 05/17 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

个人博客的运营模式能否学习TMALL天猫质量为上?

心情随笔|个人博客的运营模式能否学习TMALL天猫质量为上? 中国的互联网已经发展了很多年了,记得在十年前,个人博客十分流行,大量的人都在写博客,而且质量还不错,很多高质量的文章都是在...

原创小博客 ⋅ 今天 ⋅ 0

JavaScript零基础入门——(十一)JavaScript的DOM操作

JavaScript零基础入门——(十一)JavaScript的DOM操作 大家好,欢迎回到我们的JavaScript零基础入门。最近有些同学问我说,我讲的的比书上的精简不少。其实呢,我主要讲的是我在开发中经常会...

JandenMa ⋅ 今天 ⋅ 0

volatile和synchronized的区别

volatile和synchronized的区别 在讲这个之前需要先了解下JMM(Java memory Model :java内存模型):并发过程中如何处理可见性、原子性、有序性的问题--建立JMM模型 详情请看:https://baike.b...

MarinJ_Shao ⋅ 今天 ⋅ 0

深入分析Kubernetes Critical Pod(一)

Author: xidianwangtao@gmail.com 摘要:大家在部署Kubernetes集群AddOn组件的时候,经常会看到Annotation scheduler.alpha.kubernetes.io/critical-pod"="",以表示这是一个关键服务,那你知...

WaltonWang ⋅ 今天 ⋅ 0

原子性 - synchronized关键词

原子性概念 原子性提供了程序的互斥操作,同一时刻只能有一个线程能对某块代码进行操作。 原子性的实现方式 在jdk中,原子性的实现方式主要分为: synchronized:关键词,它依赖于JVM,保证了同...

dotleo ⋅ 今天 ⋅ 0

【2018.06.22学习笔记】【linux高级知识 14.4-15.3】

14.4 exportfs命令 14.5 NFS客户端问题 15.1 FTP介绍 15.2/15.3 使用vsftpd搭建ftp

lgsxp ⋅ 今天 ⋅ 0

JeeSite 4.0 功能权限管理基础(Shiro)

Shiro是Apache的一个开源框架,是一个权限管理的框架,实现用户认证、用户授权等。 只要有用户参与一般都要有权限管理,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户...

ThinkGem ⋅ 昨天 ⋅ 0

python f-string 字符串格式化

主要内容 从Python 3.6开始,f-string是格式化字符串的一种很好的新方法。与其他格式化方式相比,它们不仅更易读,更简洁,不易出错,而且速度更快! 在本文的最后,您将了解如何以及为什么今...

阿豪boy ⋅ 昨天 ⋅ 0

Python实现自动登录站点

如果我们想要实现自动登录,那么我们就需要能够驱动浏览器(比如谷歌浏览器)来实现操作,ChromeDriver 刚好能够帮助我们这一点(非谷歌浏览器的驱动有所不同)。 一、确认软件版本 首先我们...

blackfoxya ⋅ 昨天 ⋅ 0

线性回归原理和实现基本认识

一:介绍 定义:线性回归在假设特证满足线性关系,根据给定的训练数据训练一个模型,并用此模型进行预测。为了了解这个定义,我们先举个简单的例子;我们假设一个线性方程 Y=2x+1, x变量为商...

wangxuwei ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部