文档章节

Linux系统下CMake的安装和使用

牛牛牛大棚
 牛牛牛大棚
发布于 2016/02/17 11:11
字数 1369
阅读 2.2K
收藏 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
苏州
程序员
私信 提问
加载中

评论(0)

CMake安装或CMake Error at CMakeLists

CMake安装或CMake Error at CMakeLists 发生情景: 使用cmake命令安装软件时,报如下错误: CMake Error at CMakeLists.txt:4 (CMAKEMINIMUMREQUIRED): CMake 3.0.2 or higher is required.......

osc_gay6i4ve
2019/03/05
4
0
[CMake]CMake设置arm-linux-gcc交叉编译器

标签: cmake 交叉编译器 arm-linux-gcc 分类: 开发工具/开发环境 主机:Ubuntu18.04 交叉编译器:arm-linux-gcc CMake在ubuntu系统下默认使用系统的gcc、g++编译器,编译arm下的程序要使用...

osc_1t8zhli7
2019/11/23
38
0
CMake版本低,需要更高版本.

https://blog.csdn.net/qq_34935373/article/details/90266958 使用cmake命令安装Opencv软件时,报如下错误: CMake Error at CMakeLists.txt:4 (CMAKEMINIMUMREQUIRED): CMake 3.5.4 or hig......

osc_1t8zhli7
2019/11/22
12
0
vs2019+cmake实现Linux远程开发

在上一篇文章中我们介绍了使用vs2019作为远程Linux系统的开发环境,但我们是创建的传统的sln项目,而对于Linux开发者来说以autotools或是cmake进行项目结构的组织更为简单直观,也符合在Lin...

osc_ehtwxifo
04/16
16
0
cmake命令 安装、用法简介

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

烦恼的大胖
2011/05/25
7.8K
5

没有更多内容

加载失败,请刷新页面

加载更多

Flutter 使用Navigator进行局部跳转页面

老孟导读:Navigator组件使用的频率不是很高,但在一些场景下非常适用,比如局部表单多页填写、底部导航一直存在,每个tab各自导航场景。 Navigator 是管理路由的控件,通常情况下直接使用N...

老孟Flutter
54分钟前
28
0
使用site-maven-plugin在github上搭建公有仓库

简介 Maven是我们在开发java程序中经常使用的构建工具,在团队合作开发过程中,如果我们想要将自己写好的jar包共享给别人使用,通常需要自己搭建maven仓库,然后将写好的jar包上传到maven仓库...

flydean
今天
25
1
Python笔记:爬取各国疫情仙去人数数据制作南丁格尔玫瑰图

我凌晨用Python爬虫实时从网上爬取各国在疫情中仙去人数的数据,然后仿人民日报制作成“南丁格尔玫瑰图” 英国37048;意大利32877;西班牙27117都对得上; 但美国、法国、巴西的跟百度大数据...

tengyulong
今天
26
0
PHP Session的用法

在 PHP 中,Session 是一种服务器端的机制,服务器使用一种散列表的结构(类似于 JSON)来保存信息。相比于保存在客户端的 Cookie,Session 将用户交互信息保存在了服务器端,使得同一个客户...

linuxprobe2020
今天
37
0
webpack.03-打包js同时生成html页面

在空文件夹初始化:CMD npm init -y cnpm install -D webpack webpack-cli 文件结构 src(文件夹)--->test.js console.log('hello webpack') src(文件夹)--->index.html <html> ......

_qq507570355
今天
24
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部