当前位置: 首页 > news >正文

cmake命令行工具介绍

官方文档:https://cmake.org/cmake/help/latest/index.html

命令行工具

cmake

生成编译系统

编译和链接

本地安装

help

脚本模式

命令行模式

ctest集成测试
cpack打包

生成构建系统

这是生成构建系统的三种方式,接下来一个一个演示。

这是目录结构。下面是演示效果。(都是在构建目录中演示的。)

-------------------------------------------------------------------------------------------------------------------

为什么cmake ..就能生成构建系统呢?
因为cmake ..,是在上层去寻找CMakeLists.txt文件。

为什么cmake . 就能生成构建系统呢?

以为在cmake ..,生成构建系统之后,在构建目录下会生成一个CMakeCache.txt文件,在文件中有一个CMAKE_HOME_DIRECTORY的字段,帮助指引寻找到顶级CMakeLists.txt文件所在的位置,原理和cmake ..一样,都需要寻找CMakeLists.txt文件

编译链接

cmake --build <dir>(这里的dir就是构建目录) 等价于 make

在生成构建目录之后,就会直接生成Makefile文件,使用make就能完成编译。

为什么cmake --build <dir>就等价于make呢?

因为在构建目录的CMakeCache.txt文件中配置了语句的,使用cmake --build <dir>,实际上是使用的gmake。而这里的gmake实际上是make的一个软链接。所以二者效果等效。

实际效果如下:

测试

ctest [options]和make test等价

为什么make test和ctest等价呢?

在构建目录下生成的Makefile文件中,也做了配置,使用make test的时候,实际上调用的还是ctest命令完成的。

实际效果如下:

接下来解释效果

为什么使用ctest命令,就知道去测试test_add呢?

核心在于构建目录下生成了CTestTestfile.cmake脚本,在该脚本中对于顶级CMakeLists.txt中集成ctest的配置进行了翻译。

在顶级CMakeLists.txt集成ctest,首先添加生成二进制可执行程序,在开启测试测试功能,使用CTest中的add_test模块,添加测试case。

安装

单元测试通过之后,我们可以使⽤cmake的安装命令把库和⼆进制发布到本机的标准路径,供⼤家⼀起开发使⽤。如果cmake的配置⽂件CMakeLists.txt⾥包含install函数,则⽣成的makefile⾥也会包含install 伪⽬标,可以使⽤make来执⾏。

cmake --install <dir>(这里的dir是构建目录)命令等价于make install

这里等价的原因,也是因为在Makefile文件中做了配置。二者实际上都是在实际执行cmake_install.cmake脚本文件。如果单独执行这个cmake脚本也是有一样的效果。

效果如下:

安装之前:main是在自己项目的构建目录下,是一个临时目录,可以任意删除

安装之后:main是在机器的公共目录下 /usr/local/bin/main,删除的话,就需要权限管理了

安装之后,还会生成一个资源清单

打包

可以使⽤cpack 把⼆进制或者动态库打包成压缩包的⽅式进⾏分发和共享。如果cmake的配置⽂件CMakeLists.txt⾥包含CPack功能,则⽣成的makefile⾥也会包含 package 伪⽬标,可以使⽤make 来执⾏。


cpack [options] 等价于 make package

二者实际上都是执行CPackConfig.cmake脚本,里面配置了生成的包的格式、名称、版本等

cpack的执行步骤:
1、设置临时安装目录
2、执行cmake_install.cmake
3、收集临时目录的文件列表
4、执行打包 &拷贝压缩包至构建目录

make install 执行cmake_install.cmake的目的地是/usr/local

cpack执行cmake_install.cmake的目的地是临时的安装目录。
所以这里会存在权限的不同。

脚本模式

cmake脚本模式,不会生成构建产物,也不会生成中间过程。

cmake -P <file>(这里的file就是以cmake为后缀的脚本文件)

比如 /usr/local/bin/cmake -P cmake_install.cmake

调用外部命令

调用外部命令,类似于shell命令行一样。可以理解为使用cmake -E执行shell命令行

cmake -E [options]

查看帮助

查看帮助文档       cmake --help

重点命令解释

cmake_minimum_required

指定项目所需的最低 CMake 版本,应放在顶级 CMakeLists.txt 的第⼀⾏。

project

给项目设置一个名称。指定项⽬名字,放在顶级CMakeLists⽂件的第⼆⾏,⼦⽬录中⼀般⽆需调⽤。   

project(<PROJECT-NAME> [<language-name>...])
project(<PROJECT-NAME>
        [VERSION <major>[.<minor>[.<patch>[.<tweak>]]]]
        [DESCRIPTION <project-description-string>]
        [HOMEPAGE_URL <url-string>]
        [LANGUAGES <language-name>...])

project()执行后,CMake会自动创建一些变量,比如PROJECT_VERSION

如果没有设置语言,cmake默认设置C/C++。如果语言设置错了,就会报错 cmake error。

message函数是cmake提供的打印函数。可以打印一些变量值

运行

include

加载指定的脚本文件或者模块到当前CMakeLists.txt执行的上下文中并运行。类似于C语言中的include


 

文件的搜索路径

        如果指定的是相对路径,则相对当前的正在执⾏的CMakeLists.txt 所在的⽬录。

        如果指定的是绝对路径,那直接从对应的磁盘⽂件读取⽂件并加载执⾏。

module搜索路径顺序

        首先在当前⽬录查找指定⽂件。

        然后在CMAKE_MODULE_PATH 变量指定的⽬录中查找。

执行逻辑

        在当前执⾏上下⽂执⾏被包含的camke代码。

这是目录结构。

在CMakeLists.txt中编辑如下。

在sub文件夹中的sub.cmake中编辑如下

运行效果

可以观察出,当要真实获取当前正在执行的cmake脚本的路径时,使用CMAKE_CURRENT_LIST_DIR变量。

install

安装(可以理解为cp) 将 ⼆进制,静态库,动态库,头⽂件,配置⽂件 部署到指定⽬录。
 

在构建目录下会生成cmake_install.cmake脚本,其中通过cmake内置的api file调用底层操作系统完成真正的文件操作。
 

总的来说install分为3个阶段,1、收集安装对应的,比如目标、文件和code等2、生成cmake_install.cmake脚本3、cmake执行cmake_install.cmake脚本,使用file()内置API进行文件操作。

参数含义
TARGETS
安装 使⽤add_executable和add_library 构建的⽬标⽂件。
FILES
安装 ⽂件
DIRECTORY
安装整个⽬录
EXPORT
安装导出⽬录,⽤于发布⾃⼰的程序,供别⼈使⽤。
DESTINATION
指定安装路径,路径可以是绝对路径,也可以是相对路径(相对于 CMAKE_INSTALL_PREFIX )。

执行

add_executable

指定cmake 从源代码⽣成⼀个可执⾏⽂件。

参数含义
target_name
可执⾏⽂件的名称(不包含扩展名,如 myapp),项⽬内部唯⼀
<sources>
源⽂件列表(如 src/main.cpp)

可执行文件在构建目录下的位置,与在源代码目录中的位置是对应的。

http://www.dtcms.com/a/431255.html

相关文章:

  • 京东网站建设目标是什么做百度收录的网站
  • 怎么做虚拟币网站网站毕业设计一般做几个页面
  • 2D角色动画进阶:Spine网格变形与序列帧特效的混合工作流
  • 杭州建设企业网站修改数据库密码 进不了网站后台
  • OSPF Loading 状态 概念及题目
  • 绘制网站结构图宁波品牌网站设计
  • 硬件工程师核心技能体系(从基础到实战设计指南)
  • [MySQL] 初识数据库
  • Linux 问题排查
  • 西安seo网站设计公司用腾讯云做淘宝客网站视频下载
  • 房子已交房 建设局网站查不到wordpress开发登录插件
  • 河间申梦网站建设制作旅游网站系统源码
  • 2010 年真题配套词汇单词笔记(考研真相)
  • 微信怎么制作微电影网站店铺logo图片免费
  • TCP连接关闭的“礼貌告别“与“果断离场“:深入解析Linger选项
  • 印度做网站设计视频网站直播怎么做
  • 国外网站服务器wordpress 上传时发生了错误
  • Vim核心操作
  • 网站一级域名申请国内网站开发语言
  • Linux——自动化建构make/makefile
  • 国外游戏网站设计wordpress免费主题插件下载地址
  • 株洲网站建设公司排名闸北网站优化公司
  • 标准库stdlib排序qsort使用
  • 【数据结构与算法学习笔记】数组与链表
  • [创业之路-644]:通信行业产业链 - 手机端的BP和AP
  • 无锡网站建设方案优化python网站开发用什么
  • 怎样做seo网站链接中国建设银行河北省分行官方网站
  • 网站建设费用表有哪些做壁纸的网站好
  • CentOS7二进制安装包方式部署K8S集群之CA根证书生成
  • 国外网站阻止国内访问怎么做学的网络工程