CMake使用详解一(单文件编译)
文章目录
- 1 什么是CMake
- 2 单个源文件编译
- 2.1 编写单个cpp文件
- 2.2 编写CMakeLists.txt
- 2.3 使用`cmake .`和`make`编译项目
- 2.3.1 执行`cmake .`
- 2.3.2 执行`make`
- 2.3.3 执行`./`运行测试
- 3 CMake使用详解二(多文件编译)
1 什么是CMake
你或许听过好几种 Make 工具,例如 GNU Make ,QT 的 qmake ,微软的 MS nmake,BSD Make(pmake),Makepp,等等。这些 Make 工具遵循着不同的规范和标准,所执行的 Makefile 格式也千差万别。这样就带来了一个严峻的问题:如果软件想跨平台,必须要保证能够在不同平台编译。而如果使用上面的 Make 工具,就得为每一种标准写一次 Makefile ,这将是一件让人抓狂的工作。
CMake就是针对上面问题所设计的工具:它首先允许开发者编写一种平台无关的 CMakeList.txt 文件来定制整个编译流程,然后再根据目标用户的平台进一步生成所需的本地化 Makefile 和工程文件,如 Unix 的 Makefile 或 Windows 的 Visual Studio 工程。从而做到“Write once, run everywhere”。显然,CMake 是一个比上述几种 make 更高级的编译配置工具。一些使用 CMake 作为项目架构系统的知名开源项目有 VTK、ITK、KDE、OpenCV、OSG 等 。
在 linux 平台下使用 CMake 生成 Makefile 并编译的流程如下:
- 编写 CMake 配置文件 CMakeLists.txt 。
- 执行命令
cmake PATH
或者ccmake PATH
生成 Makefile 。其中,PATH
是 CMakeLists.txt 所在的目录。 - 使用
make
命令进行编译。
2 单个源文件编译
2.1 编写单个cpp文件
假设现在我们的项目中只有一个源文件main.cpp
,该程序的用途是计算一个数的指数幂,新建这个cpp文件
$ cd
$ mkdir mathPowerDemo
$ cd mathPowerDemo
$ gedit main.cpp
键入代码如下
#include <stdio.h>
#include <stdlib.h>
/*** power - Calculate the power of number.* @param base: Base value.* @param exponent: Exponent value.** @return base raised to the power exponent.*/
double power(double base, int exponent)
{int result = base;int i;if (exponent == 0) {return 1;}for(i = 1; i < exponent; ++i){result = result * base;}return result;
}
int main(int argc, char *argv[])
{if (argc < 3){printf("Usage: %s base exponent \n", argv[0]);return 1;}double base = atof(argv[1]);int exponent = atoi(argv[2]);double result = power(base, exponent);printf("%g ^ %d is %g\n", base, exponent, result);return 0;
}
2.2 编写CMakeLists.txt
首先编写CMakeLists.txt
文件,并保存在与main.cpp
源文件同个目录下:
$ gedit CMakeLists.txt
在CMakeLists.txt
中输入:
# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)
# 项目信息
project (mathPowerDemo)
# 指定生成目标
add_executable(mathPowerDemo main.cpp)
CMakeLists.txt 的语法比较简单,由命令、注释和空格组成,其中命令是不区分大小写的。符号 #
后面的内容被认为是注释。命令由命令名称、小括号和参数组成,参数之间使用空格进行间隔。
对于上面的 CMakeLists.txt 文件,依次出现了几个命令:
cmake_minimum_required
:指定运行此配置文件所需的 CMake 的最低版本;project
:参数值是mathPowerDemo
,该命令表示项目的名称是mathPowerDemo
。add_executable
: 将名为main.cpp
的源文件编译成一个名称为 mathPowerDemo 的可执行文件。
此时文件夹目录下有如下两个文件:
2.3 使用cmake .
和make
编译项目
2.3.1 执行cmake .
在当前目录执行 cmake .
,得到 Makefile
此时文件夹下面多了3个文件,分别是CMakeCache.txt
,cmake_install.camke
,Makefile
。
和1个文件夹/CMakeFiles
,里面有很多cmake相关的文件。
2.3.2 执行make
再使用 make
命令编译得到 mathPowerDemo 可执行文件。
此时文件夹下又多了一个可执行文件’mathPowerDemo’。
2.3.3 执行./
运行测试
计算9的平方
$ sudo chmod 777 mathPowerDemo
$ ./mathPowerDemo 9 2
得到结果:81
3 CMake使用详解二(多文件编译)
我的下一篇博客:CMake使用详解二(多文件编译)
# 参考文献:
- CMake入门实战
- CMake学习
CMake使用详解一(单文件编译)相关推荐
- vue单文件props写法_详解Vue 单文件组件的三种写法
详解Vue 单文件组件的三种写法 JS构造选项写法 export defaul { data, methods, ...} JS class写法 @Component export default c ...
- CMake使用详解二(多文件编译)
文章目录 1 同一目录,多个源文件 1.1 创建2个源文件 1.2 编写CMakeLists.txt 1.3 编译项目 2 多个目录,多个源文件 2.1 在不同的目录下新建源代码 2.2 编写CMak ...
- 详解LAMP源码编译安装
实战:LAMP源码编译安装 家住海边喜欢浪:zhang789.blog.51cto.com 目录 详解LAMP源码编译安装 LAMP简介 一.准备工作 二.编译安装 Apache 三.编译安装 MyS ...
- CMake 手册详解(五)
CMake 手册详解(五) CMD#2: add_custom_target 添加一个目标,它没有输出:这样它就总是会被构建. add_custom_target(Name [ALL] [comman ...
- CMake手册详解 (十二)
2019独角兽企业重金招聘Python工程师标准>>> SirDigit CMake手册详解 (十二) CMD#30:find_library查找一个库文件 find_library ...
- 实验详解——parted单磁盘分区并进行配额
实验详解--parted单磁盘分区并进行配额 一.实验要求 二.实验开始 1.添加新硬盘 2.对新硬盘进行parted分区,格式设置为ext4 3.格式化分区,格式为ext4 4.设置配额方式和挂载 ...
- 详解S60 WebKit 21772编译教程
S60 WebKit 21772编译教程是本文要介绍的内容,主要是来了解并学习S60 WebKit应用,具体内容的学习来看本文详解. 1.安装环境: perl jdk S60-SDK-0548-3.0 ...
- CMake 手册详解(十八)
2019独角兽企业重金招聘Python工程师标准>>> SirDigit CMake 手册详解(十八) CMD#45 : include从给定的文件中读取CMake的列表文件. in ...
- CMake手册详解 (十四)
2019独角兽企业重金招聘Python工程师标准>>> SirDigit CMake手册详解 (十四) CMD#32 : find_path搜索包含某个文件的路径 find_path ...
最新文章
- 实对称矩阵的性质_浅谈矩阵的相似对角化(一)
- Jupyter中打印所有结果的解决办法
- java实现ldap服务器_Java到LDAP教程(包括如何安装LDAP服务器/客户端)
- Linux的vi命令
- 盲审不到4分的论文竟中了ICLR 2019??!!ICLR 2019官方这样回应
- 7-160 找完数 (20 分)
- python selenium --一些常用方法
- C++——oop思想
- NetLimiter(网络限速-对付流氓上传)
- 一元三次方程通用求解方法
- 公司/企业如何管理?管理技巧是什么?《宁向东管理学课》音频资料免费下载
- select * from a,b用法
- [Python]PEP8 编码规范及开发中的一些惯例和建议
- linux执行scp命令出错
- 少儿编程是不是智商税
- 【今日CV 计算机视觉论文速览 第128期】Mon, 10 Jun 2019
- linux 怎样安装 nginx
- 安全模式怎么更改计算机用户,电脑怎么关闭安全模式步骤详解
- 神经网络学习小记录45——Keras常用学习率下降方式汇总
- 记录第一次因为技术出差(自嘲一番吧)
热门文章
- STM32工作笔记0096---用sprintf分配内存
- STM32工作笔记0032---编写跑马灯实验---寄存器版本
- Linux学习笔记015---Centos关机命令
- APPCAN学习笔记005---AppCan IDE安装下载,AppCan IDE启动
- 云计算学习笔记002---云计算的理解及介绍,google云计算平台实现原理
- 1004 C语言设置测试数据个数和测试结束标志
- 排列组合算法之一: 01转换法_java改变后的c++版
- 一步一步写算法(之图的保存)
- java健康检查的作用,spring cloud分布式健康检查
- 磁盘移臂调度实验_10 Swarm 的安装和基本的服务编排调度