我的编程空间,编程开发者的网络收藏夹
学习永远不晚

CMake的简单应用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

CMake的简单应用

 各种不同的Make 工具遵循着不同的规范和标准,所执行的 Makefile 格式也千差万别。如果软件想跨平台,必须要保证能够在不同平台编译,这就得为每一个Make工具写一次 Makefile ,这将是一件让人抓狂的工作。使用CMake工具就可以很好的解决这个问题。

  CMake是一个比make更高级的编译配置工具,它可以根据不同平台、不同的编译器,生成相应的Makefile。通过编写CMakeLists.txt,可以控制生成的Makefile,从而控制编译过程。CMake自动生成的Makefile不仅可以通过make命令构建项目,生成目标文件,还支持安装(make install)、测试安装的程序是否能正确执行(make test,或者ctest)、生成当前平台的安装包(make package)、生成源码包(make package_source)、产生Dashboard显示数据并上传等高级功能,只要在CMakeLists.txt中简单配置,就可以完成很多复杂的功能,包括写测试用例。如果有嵌套目录,子目录下可以有自己的CMakeLists.txt。

  在 linux 平台下使用 CMake 生成 Makefile 并编译的流程如下:

  1. 编写 CMake 配置文件 CMakeLists.txt 。

  2. 执行命令 cmake PATH 或者 ccmake PATH 生成 Makefile。其中, PATH 是 CMakeLists.txt 所在的目录。

  3. 使用 make 命令进行编译。

语法

  CMake基本语法由命令、注释和空格组成,其中命令是不区分大小写的。符号 # 后面的内容被认为是注释。命令由命令名称、小括号和参数组成,参数之间使用空格进行间隔。变量引用使用 ${VAR} 形式。

  command (args  ...)  #comment

常用命令:

    cmake_minimum_required (VERSION 2.8)  # CMake 最低版本号要求

  project (Demo)               # 指定项目的名称

  set(class="lazy" data-srcS main.cpp ...)             # 设置变量

  include_directories(/usr/include/jsoncpp)        # 添加头文件目录,比如使用的一些lib库

  aux_source_directory(. DIR_class="lazy" data-srcS)     # 查找当前目录下的所有源文件,并将名称保存到 DIR_class="lazy" data-srcS 变量

  add_subdirectory(math)           # 添加 math 子目录

  add_executable(Demo main.cc ...)       # 指定生成目标,第一个参数为目标文件名

  add_library(MathFunctions ${DIR_LIB_class="lazy" data-srcS})   # 添加一个库文件

  target_link_libraries(Demo MathFunctions)    # 添加链接库

获取更多CMake信息:

  cmake --help

  cmake --help-command-list

  cmake --help-variable-list

示例代码

示例代码1:


cmake_minimum_required(VERSION 2.8)    # CMake 最低版本号要求

set(CMAKE_CXX_FLAGS "-std=c++0x")      # 设置编译参数
include_directories(/usr/include/jsoncpp) # 添加头文件目录

set(class="lazy" data-srcS                     # 设置变量class="lazy" data-srcS,将所有源文件添加到变量class="lazy" data-srcS
  SamsungRequestResolver.cpp
  SamsungResolverContainer.cpp
  SamsungResponseResolver.cpp
  BanCat.cpp
  main.cpp
)

add_executable(framework ${class="lazy" data-srcS})     # 指定生成目标
target_link_libraries(framework jsoncpp hiredis boost_system)  # 添加链接库

示例代码2:(来源于参考引用1)

代码目录如下所示,./Demo3目录下有一个main.cc文件和一个math目录。对于这种嵌套目录的情况,需要在目录 ./Demo3 和 ./Demo3/math 下各创建一个CMakeLists.txt。


./Demo3
  |
  +--- main.cc
  |
  +--- math/
     |
     +--- MathFunctions.cc
     |
     +--- MathFunctions.h

父目录中的 CMakeLists.txt :


# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)
# 项目信息
project (Demo3)
# 查找当前目录下的所有源文件
# 并将名称保存到 DIR_class="lazy" data-srcS 变量
aux_source_directory(. DIR_class="lazy" data-srcS)
# 添加 math 子目录,math目录下的CMakeLists.txt文件和源代码会被处理
add_subdirectory(math)
# 指定生成目标Demo
add_executable(Demo main.cc)
# 添加链接库
target_link_libraries(Demo MathFunctions)

子目录中的 CMakeLists.txt:


 # 查找当前目录下的所有源文件
 # 并将名称保存到 DIR_LIB_class="lazy" data-srcS 变量
 aux_source_directory(. DIR_LIB_class="lazy" data-srcS)
 # 生成链接库
 add_library(MathFunctions ${DIR_LIB_class="lazy" data-srcS})

编译

  在编译之前,首先要将CMakeLists.txt文件放在代码目录中。为了方便管理生成的makefile文件、目标文件等文件,最好创建一个build目录专门用来存放这些文件。在代码目录,依次执行以下命令:


mkdir build
cd build
cmake ..
make

参考引用:

  1. http://www.hahack.com/codes/cmake/
  2. https://www.cnblogs.com/qixianyu/p/6574048.html

到此这篇关于CMake的简单应用的文章就介绍到这了,更多相关CMake入门内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

CMake的简单应用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Android ViewFlipper简单应用

Android ViewFlipper 简单应用,废话不多说,直接看代码 activity_guide.xml
2022-06-06

Android底部菜单简单应用

在Android中实现菜单功能有多种方法。 Options Menu:用户按下menu Button时显示的菜单。 Context Menu:用户长时间按下屏幕,所显示出来的菜单也称为上下文菜单。 Submenu:子菜单。 但是有时
2022-06-06

PostGis的几个简单应用算法

2.根据点在数据库里查询在哪个多边形中 SELECT id,geomfrom dt_cy where ST_Contains(geom, st_geometryfromtext("POINT(113.458729 34.816974)",4326));
PostGis的几个简单应用算法
2020-07-23

iOS指纹识别的简单应用

指纹识别(Touch ID)的简单应用,供大家参考,具体内容如下 1、调用- (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading t
2022-05-31

Android编写简单的聊天室应用

最近写了一个简单的聊天室应用,可以发送表情,更改头像这些功能。主要技术点就是怎样把表情图片放到textview等Ui控件中展示。这里废话不多说,下面是效果图: 这里主要讲下怎样把文本替换到表情,先说下思路,首先我们的图片是保存在本地资源目录
2022-06-06

Vue怎么实现简单的todo应用

今天小编给大家分享一下Vue怎么实现简单的todo应用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1. 引用vue.js<
2023-07-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录