【Cmake】初识CMake(一)
业务需要用到CMake和gtest框架,但我此前从来没接触过,就花时间整理了下,做了一个简单的cmake尝试。
前言
我过去使用Java语言,就算用C++也是Dev C++ IDE,很少关注编译与构建的细节。只是大概知道:
- C++是编译型语言。cpp代码文件需要由编译器编译成exe二进制文件才能执行
- Java是编译解释性语言。java代码文件需要先编译成class文件,再由解释器放在jvm虚拟机里运行。
花时间学习CMake确实有助于我理解很多底层的知识,特别是理解很多细节,这个教程会持续下去,但不一定每周都更新。
准备工作
语法知识放一边,先来安装CMake和gcc。(以下的安装基于Windows)
gcc
如果你电脑已经安装了Dev C++或者Visual Studio,你大概率有一个gcc在电脑里。
使用以下代码检查电脑的gcc环境:gcc -v
你应该能看出来,我电脑的gcc用的是新版Dev C++自带的 9.2.0,我电脑同时安装了VS 2022,这给我带来了不少麻烦,会在以后的教程里提及。
这个版本的Dev C++是国内作者的改版,链接:小龙 Dev-C++ 中文主页
如果你的电脑有MinGW环境
添加环境变量即可,以我的为例,Dev C++自带的gcc在以下位置:D:\Program Files (x86)\Dev-Cpp\TDM-GCC-64
,这个目录下应该包含bin、include、lib等文件夹。
在环境变量-系统变量-Path里,加入bin文件夹所在的路径,如图:
如果你的电脑没有MinGW环境
下载地址:MinGW
install,一路next。安装成功后打开MinGW Installation Manager,选择需要安装的版本(如果你不知道需要哪些就全选),点击菜单栏的Installation,点击Apply Changes,在弹出的对话框里点击Apply,然后等待安装完成即可。
然后按照上面的配置环境变量。
顺便科普一下TDM-GCC和MinGW的信息
MinGW: 编译目标仅兼容 32 位应用程序,最新的官方二进制版本为 GCC 9.2.0。(OSDN)
MinGW-w64: 衍生自 MinGW 的项目,编译目标兼容 32 位应用程序与64 位应用程序,最新的官方二进制版本为 GCC 8.1.0。(SourceForge)
TDM-GCC: 衍生自 MinGW 和 MinGW-w64 的项目,分为 32 位与 64 位两个版本,32 位版本的编译目标仅兼容 32 位应用程序,64位版本的编译目标兼容 32 位应用程序与 64 位应用程序,最新的官方二进制版本为 GCC 10.3.0。
CMake
下载地址:Download | CMake
选择Windows x64的msi安装包,如下一路安装即可,记得为所有用户安装,以及配置path。
在PowerShell输入cmake --version
以检查CMake是否安装成功,如图
从Helloworld开始
CMake
简单来说,gcc的确可以将源文件编译成exe文件,但文件一多,就需要一个编译顺序,利用构建(build)可以指定这种顺序,定义构建的文件被称为Makefile。
但是编写Makefile对于大型项目又比较复杂,通过CMake就可以使用更加简洁的语法定义构建的流程,CMake定义构建过程的文件为CMakeLists.txt。
cmake的一般流程为:
- 生成构建系统,对应的指令为
cmake
- 构建,对应的指令为
cmake --build
- 其他操作,比如执行、测试等。
一个非常简单的例子
这个例子简单到,实际生产的时候,是绝对不会用这样的结构的。
目录结构如下:
cmakeTest
├─ CMakeLists.txt
└─ main.cpp
main.cpp
的代码如下。就是输出hello cmake,没什么意义。
#include<cstdio>using namespace std;int main(){printf("Hello CMake!");
}
CMakeLists.txt
的结构比较重要:
# 项目所需最低Cmake版本
cmake_minimum_required(VERSION 3.12)# 项目名称、版本、语言
project(cmaketest VERSION 1.0.0 LANGUAGES C CXX)# 源文件与可执行文件
add_executable(helloc main.cpp)
生成构建系统
在项目根目录下执行
cmake -B build
结果如下:
很奇怪,这里用的是 VS 2022 的构建,没有用gcc的,这个问题留待以后解决,目前暂时保持现状不动。
构建
同样在根目录,执行
cmake --build build
执行
可能由于使用 VS 的原因,我的可执行文件并没有在根目录生成。你可以自己寻找位置,这太奇怪了。
【Cmake】初识CMake(一)相关推荐
- 初识CMake,如何编写一个CMake工程(上)
如何编写一个CMake工程 笔者想分享CMake工程的原因? 1 接触CMake 1.1 认识CMake被广泛的使用? 1.2 了解CMake运行流程 1.3 Make和Makefile是什么关系? ...
- 初识CMake,如何编写一个CMake工程(下)
如何编写一个CMake工程 上文分析了针对一个源文件.多个源文件.多个目录的情况 1 CMake自定义编译选项Demo4 1.1 效果展示 2 CMake安装(make install)与测试(mak ...
- CMake基础 第1节 初识CMake
介绍# 本节展示一个非常基本的hello world的例子. 本节中的文件如下: A-hello-cmake$ tree . ├── CMakeLists.txt ├── main.cpp [CMak ...
- CMake Error: CMake was unable to find a build program corresponding to Ninja.
系统环境: $ lsb_release -a LSB Version: :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:g ...
- linux下cmake命令行,深入理解CMake(1): CMake命令行参数
初衷 CMake能用来编写跨平台(cross-platform)的构建规则,通过这些规则来调用各个平台的编译器.链接器,生成各个目标(静态库,静态库,或者可执行). 我第一个接触的大型C++项目是Op ...
- 【已解决】CMake Error: Cannot determine link language for target “xxx“. CMake Error: CMake can not determ
报错: CMake Error: Cannot determine link language for target "CMakeLists". CMake Error: CMak ...
- Could not find a package,configuration file provided by G2O ,G2OConfig.cmake,g2o-config.cmake
因为项目需要使用到g2o,所以自己从git上面clone下来, git clone https://github.com/RainerKuemmerle/g2o.git 然后: cd g2o mkdi ...
- vs2017 cmake android,CMake构建VS2017工程
1 安装VS2017/cmake 2 工程开发 3 生成VS2017工程 4 参考资料 1 安装VS2017/cmake 软件安装: Visual Studio官网下载Visual Studio Co ...
- CMake Error at cmake/boost.cmake:76 (MESSAGE)
在源码安装mysql5.7系列时,出现如下错误: 错误现象: CMake Error at cmake/boost.cmake:76 (MESSAGE): You can download it wi ...
- linux用cmake编译,CMake使用简介(forLinux)
cmake [选项] cmake [选项] 因为source 目录在../ 所以指定../为源码目录. -G:指定构建系统,当前只想创建Linux/Unix系统标准Makefile.所以指定为Uni ...
最新文章
- ListView 添加头部 和尾部 布局 (addHeaderView 和 addFooterView)
- 区块链基础--工作量证明
- 页面转发后文本显示???_使用Divi的滑动动画显示过程的进度
- datagridview如何将sqlite实现多表查询_服气!月薪3W的Exceler,居然是这样合并多表数据的...
- 小伙工资单被同事看到后遭开除!网友炸锅了 最新后续来了...
- 查询SQL Server中表占用的空间方法
- IdentityServer4 中文文档与实战
- DirectX11 SDK 例程报错解决方法
- 【笔记】【机器学习基础】非负矩阵分解
- IP地址的定义与分类
- 开源 5k star 的定时任务管理系统,我爱了!
- Java 打印 Excel 表格
- C++与QML混合编程
- 01 - Empire Lupin One
- PHP 获取当前访问的URL
- 离散数学8.2.4主析取范式
- android nfc驱动,Android NFC 简单梳理
- 计算机国二大连考点,CFA一二三级的大连考点是在哪!
- 游戏策划学习:未知性与好奇心
- VIP邮箱收费多少钱?怎么注册申请163邮箱呢?步骤详解