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

CMake简易使用教程

前言:cmake能且仅能识别的cmake文件名称为CMakeLists.txt,有一个字母的错误都会导致cmake无法正常使用,同时,包含CMakeLists和源代码的最初的目录被称作顶级构建目录

cmake还有很多东西,本人比较懒,学校里突然让使用clion,为了获得比较好的编程体验,特意学了一点cmake知识,对于使用clion作为学习c语言是很够了

1、设置最低版本要求

cmake_minimum_required(VERSION 3.18)

这里一般设置为3.18版本,虽然还有更新的,但是很多Linux发行版自带的CMake版本不一

2、设置项目名称

project( hello_world

        VERSION 3.18

        LANGUAGE C CXX

)

示例是将项目名称设置为hello_world,VERSION是用来指定CMake版本,而下面的LANGUAGE是用来设置项目语言(project一定要在顶级构建目录(最初源文件的目录)中显示调用,否则CMake会报警告,并将语言设置为默认的C和C++,项目名称设置为project)

3、指定可执行文件的名称以及与其相关的源文件的名称

add_executable(main main.cpp)

示例是将构建目录的main.cpp作为原文件,最终构建出的可执行文件是main。

可执行文件的名称必须在项目里全局唯一

4、生成构建目录

分为两种构建方式:源内构建和源外构建

前者的意思是直接在源代码目录下生成各种各样的配置文件,后者是在源代码目录之外的一个目录生成我们各种各样的配置文件

官方更加推荐我们使用前者,因为这样可以保证源代码目录的整洁易读

主要有一下三种命令行写法构建工作目录

cmake .         这是在源文件目录生成构建目录

cmake ../       这是在源文件目录中再创建一个目录来生成各种各样的配置文件

cmake -S ./ -B ../        这是指定源代码目录和我们的构建目录,-S用于指定源代码目录,-B用于指定构建目录

5、测试CTest

include(CTest)#包含相应组件

add_test(

        NAME testAdd #测试项目名称

        COMMAND main #要测试的可执行文件

)

其中测试的方法有以下三种

(1)直接./运行可执行程序查看

(2)采取make test的方式,使用cmake帮你生成的makefile进行运行

(3)ctest指令,错误信息会被存放在Testing的一个叫做LastTest.log的文件里(如果你使用的是vscode的远程开发的话,你可以按住ctrl然后点击给出的链接来查看相应错误日志)


文章转载自:

http://TlPeK3JM.wkLmj.cn
http://cGX66HaO.wkLmj.cn
http://wi91Tnac.wkLmj.cn
http://Oi4FxzzL.wkLmj.cn
http://Jy7yCDyy.wkLmj.cn
http://akzmweg6.wkLmj.cn
http://OlyeohbL.wkLmj.cn
http://EE6PPZxo.wkLmj.cn
http://RdcVobu2.wkLmj.cn
http://i6NFGYby.wkLmj.cn
http://bwlMq4En.wkLmj.cn
http://teqbSjh3.wkLmj.cn
http://1nPSCF4n.wkLmj.cn
http://ki48fW52.wkLmj.cn
http://nKt31Qkn.wkLmj.cn
http://V13qMbae.wkLmj.cn
http://MhYGHXyT.wkLmj.cn
http://GAqeqrBM.wkLmj.cn
http://vReRGeD8.wkLmj.cn
http://TSP4Kwkf.wkLmj.cn
http://hpretwol.wkLmj.cn
http://grL5Azh8.wkLmj.cn
http://dAYYQNuh.wkLmj.cn
http://EiVfIKrs.wkLmj.cn
http://7to9sthT.wkLmj.cn
http://dXzkzPjT.wkLmj.cn
http://LKekygqU.wkLmj.cn
http://DiPn517r.wkLmj.cn
http://HZKrkDZ7.wkLmj.cn
http://zPe0v37U.wkLmj.cn
http://www.dtcms.com/a/371707.html

相关文章:

  • daily notes[13]
  • Solana 核心概念:计算单元与交易成本解析
  • 【系统分析师】第11章-关键技术:软件需求工程(核心总结)
  • 如何通过日志先行原则保障数据持久化:Redis AOF 和 MySQL redo log 的对比
  • 做好LoRaWAN的传感器都需要实现哪些功能点?
  • React入门 | React 新手入门与常用库和工具
  • jvm问题排查
  • C/C++数据结构之栈基础
  • 【Qt】项目的创建和各个控件的使用
  • Python高级技巧(七):装饰器
  • C#有人IO模块USR-IO808的完整指南
  • Apache Dubbo学习笔记-使用Dubbo发布、调用服务
  • CTFshow系列——PHP特性Web97-
  • Photoshop - Photoshop 创建图层蒙版
  • DevOps实战(3) - 使用Arbess+GitLab+Hadess实现Java项目自动化部署
  • Python从入门到精通_00_初识python
  • LabVIEW 与 PLC 通讯
  • 项目介绍:图像分类项目的最小可用骨架--代码细节讲解
  • 【.Net技术栈梳理】01-核心框架与运行时(CLR与GC)
  • 简述ajax、node.js、webpack、git
  • Java安全体系深度研究:技术演进与攻防实践
  • Drupal XSS漏洞复现:原理详解+环境搭建+渗透实践(CVE-2019-6341)
  • Mybatis常见问题
  • Python基础语法篇:布尔值是什么?True 和 False 的实际用途
  • FMI(Functional Mock-up Interface,功能模型接口)
  • macOS中设置环境变量的各文件及作用域
  • Python+DRVT 从外部调用 Revit:批量创建楼板
  • 课前准备--解码乳腺癌进展:单细胞基因组与转录组的联合分析
  • 机器学习中的损失函数是什么
  • P5019 [NOIP 2018 提高组] 铺设道路