windows下cmake的小白级入门使用教程(hello world)

news2024/11/25 4:24:52

想学习cmake,基于惯性思维,想先跑通一个“hello world”的例子,奈何网上教程一大把,有用的教程破费功夫寻找。大部分教程都没有从新电脑(重装系统后的电脑)的角度讲述步骤。

为了得到干净的电脑环境,研究了一段时间VMware虚拟机,并写了几篇文章,感兴趣的读者可移步阅读:

VMware虚拟机安装win10系统教程: VMware虚拟机安装win10系统教程_西晋的no1的博客-CSDN博客

经过几天的努力将cmake的“hello world”整个步骤从新电脑(重装系统后的电脑,基于VMware虚拟机)的角度跑通了,并将下述过程记录进行了验证,结果是可行的。

下述内容有些来自于其他博客,由于资料查询的比较多,无法对应出处,故不单列出处了,在此对引用内容的作者们表示感谢。

 

一、Cmake 介绍

CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件。只是 CMake 的组态档取名为 CMakeLists.txt。Cmake 并不直接建构出最终的软件,而是产生标准的建构档(如 Unix 的 Makefile 或 Windows Visual C++ 的 projects/workspaces),然后再依一般的建构方式使用。

二、下载安装Cmake,配置环境变量,检验安装是否正常

1.下载Cmake

下载地址: Download | CMake
点击链接进入cmake官网下载网页,下载最新稳定版即可(Latest Release)

我这里下载的是cmake-3.26.4-windows-x86_64.msi(PS: 根据个人电脑windows系统位数下载对应的版本)

若不想安装,可直接下载压缩包版本cmake-3.26.4-windows-x86_64.zip。

2.安装cmake,配置环境变量

CMake的安装非常简单。压缩包版本直接解压即可,安装版本也可一直点击下一步进行安装。为了使用方便,可将CMake配置到环境变量中,当然,这一步也可以在安装过程中设置。另外需要注意的是为了避免不必要的麻烦,路径中最好不要包括中文字符。下面简单描述一下安装过程。

1.双击下载的安装包,进入安装界面,点击[Next]。

2.勾选同意许可后,点击[Next]。

3.可在此处选择将CMake路径添加到环境变量中,并且创建CMake GUI程序的桌面快捷方式。然后点击[Next]。

4.可在此处自定义安装目录,设置好后点击[Next]。

5.开始安装,安装完成后点击[Next]。

6.安装完成,点击[Finish],结束安装过程。

3.检验安装是否正常

安装完成后,即可使用CMake了。在命令行中输入"cmake --version",可看到如下图所示的输出。

 

三、下载安装MinGW,配置环境变量,检验安装是否正常

cmake并不能完成整个工程的编译,cmake会输出makefile文件,我们需要用这个生成makefile进行make编译。那就需要在windows环境中安装MinGW。

1.下载MinGW

到页面: MinGW-w64 - for 32 and 64 bit Windows - Browse Files at SourceForge.net 下载离线安装包

我下载了x86_64-posix-sjlj的压缩包。

2.安装MinGW

将下载下来的x86_64-posix-sjlj压缩包解压缩便得到了mingw64。

可以看到,这个是可以直接用的版本了

3.配置环境变量

直接将/bin路径添加到环境变量中即可。

在命令行下,g++\gcc命令有效

由于我们需要在window下直接输入make,就可以识别makefile并且自动编译,可以将MinGW安装路径bin文件下的mingw32-make.exe重命名为make.exe。

4.检验安装是否正常

打开cmd输入make -version,出现如下信息表示安装成功。

四、使用Cmake编译一个简单的小工程

新建一个目录,在该目录中新建两个文件CMakeLists.txt和hello_cmake.c,两个文件内容如下:

CMakeLists.txt

cmake_minimum_required(VERSION 3.0)
project (hello_cmake)
add_executable(hello_cmake hello_cmake.c)

第一行代码指定了构建项目所需的最低CMake版本;

第二行指定了工程的名字,随后输出的exe可执行文件也会和它同一个名称;

第三行表示项目需要构建一个exe可执行文件,并且它由main.cpp编译而成;

hello_cmake.c

#include <stdio.h>
	 
int main(int argc, char *argv[])
{
	printf("Hello CMake!\n");
	getchar();
	return 0;
}

 

 

打开cmd进入当前目录,输入如下命令行。

mkdir build
cd build
cmake -G   "MinGW Makefiles" ..
make
hello_cmake.exe

如下图所示:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/644326.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【图像任务】Transformer系列.3

本文介绍3篇改进Transformer以实现不同图像任务的工作&#xff1a;少样本医学图像分割CAT-Net&#xff08;arXiv2023&#xff09;&#xff0c;高效图像重建等任务GRL&#xff08;CVPR2023&#xff09;&#xff0c;轻量视觉Transformer中的局部信息思考CloFormer&#xff08;arX…

根据指定条件和规则逐一判断两个数组中对应元素是否接近 numpy.isclose()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 根据指定条件和规则逐一判断 两个数组中对应元素是否接近 numpy.isclose() [太阳]选择题 请问关于以下代码的表述错误的是&#xff1f; import numpy as np a np.array([2, 7, np.nan]) b …

【RabbitMQ教程】前言 —— 消息队列介绍

&#x1f4a7; 【 R a b b i t M Q 教程】前言——消息队列介绍 \color{#FF1493}{【RabbitMQ教程】前言 —— 消息队列介绍} 【RabbitMQ教程】前言——消息队列介绍&#x1f4a7; &#x1f337; 仰望天空&#xff0c;妳我亦是行人.✨ &#x1f984; 个人主页——微风…

力扣题库刷题笔记3--无重复字符的最长子串

1、题目如下&#xff1a; 2、个人Python代码实现如下&#xff1a; 代码如下&#xff1a; class Solution: def lengthOfLongestSubstring(self, s: str) -> int: temp "" #临时变量&#xff0c;记录当前连续不重复子串 out_put …

MEC | 条款1 仔细区别pointers和references

More Effective C&#xff08;MEC&#xff09; 文章目录 More Effective C&#xff08;MEC&#xff09;条款1 仔细区别pointers和references结论 本章描述 pointers 和 references 的差异&#xff0c;并告诉你它们适当使用时机。 条款1 仔细区别pointers和references pointers…

cxgrid显示海量数据

在默认情况下&#xff0c;cxgrid显示几万条以上的数据会很慢。怎么办&#xff1f; 交下面的属性设为TRUE以后&#xff0c;速度飞快。 但速度是快了&#xff0c;自动计算列的合计值这些功能却失效了&#xff0c;正所谓有得必有失&#xff01;

CSS基础学习--11 padding(填充)

一、定义 CSS padding&#xff08;填充&#xff09;是一个简写属性&#xff0c;定义元素边框与元素内容之间的空间&#xff0c;即上下左右的内边距。 当元素的 padding&#xff08;填充&#xff09;内边距被清除时&#xff0c;所释放的区域将会受到元素背景颜色的填充。 单独使…

软考A计划-系统架构师-案例分析考前背诵-下篇

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff…

XSS注入(跨站脚本攻击)

今天学习一下xss注入 1.XSS是什么 XSS注入漏洞又称为"跨站脚本攻击(Cross Site Scripting)"&#xff0c;为了不和层叠样式表(Cascading Style Sheets,CSS)混淆&#xff0c;所以将跨站脚本攻击缩写为XSS。xss本质上是黑客通过对网页的HTML注入&#xff0c;篡改了原本…

C\C++ Thread-多线程

文章作者&#xff1a;里海 来源网站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan 简介 c多线程 时间 c语言的时间处理&#xff1a;time.h 获取从1970年1月1日到当前经过的秒数: long t0 time(NULL); 让程序暂停3秒&#xff1a; sleep(3); 当前时间的3秒后&…

基于Java购物商城系统设计与实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a; ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精…

Linux 环境下Docker部署项目(七)

文章目录 一、前言二、项目打包上传1. 项目打包简单 (故省略)2. 上传jar包程序到Linux 三、拉取镜像1. 拉取镜像java:8(jdk1.8)2. 拉取 java8 出错&#xff1a; 四、创建Dockerfile文件1. 创建Dockerfile文件2. 编辑Dockerfile3. 构建镜像&#xff08;需要在Dockerfile同级目录…

腾讯安全发布“数字安全免疫力”模型框架,建设发展驱动安全新范式

随着数字化进程加快&#xff0c;企业数字化体系的边界在不断拓展&#xff0c;安全风险和挑战不断增加&#xff0c;传统被动防御的安全应对常显疲态&#xff0c;数字安全时代亟待建立全新的安全范式。 6月13日&#xff0c;腾讯安全联合IDC在北京发布“数字安全免疫力”模型框架…

Nucleo-F411RE (STM32F411)LL库体验 1 - 点亮LED

Nucleo-F411RE &#xff08;STM32F411&#xff09;LL库体验 1 - 点亮LED 1、开发环境 一如既往&#xff0c;还是macos gcc pyocd的开发环境。 pyocd pack find stm32f411retx #命令查找支持包 pyocd pack install stm32f411retx #安装支持包 pyocd flash --erase auto --ta…

跨站点脚本(XSS)的介绍

目录 1、概述 2、XSS普遍认可三种形式&#xff1a; ​2.1 反射式 XSS 攻击 2.2 存储的 XSS 攻击 2.3 基于DOM的XSS 攻击 2.3.1 DOM中相关建议&#xff1a; 2.3.2 利用javascript开发时的建议规则&#xff1a; 3、XSS 攻击后果 4、框架安全 5、XSS 防御理念 6、XSS P…

Linux(链接器的意义)

文章目录 前言一、链接器概念介绍二、目标文件三、main函数是第一个被执行的函数吗&#xff1f;四、链接脚本的意义和作用总结 前言 本篇文章我们来讲解链接器的意义。 一、链接器概念介绍 链接器&#xff08;Linker&#xff09;是计算机编译器系统中的一个重要组成部分&…

MongoDB安装、设置密码、操作命令、配置文件说明、备份与还原

目录 一、mongodb概述 二、mongodb安装部署 三、mongodb设置密码 四、MongoDB操作命令与说明 五、配置文件说明 六、备份与还原 一、mongodb概述 MongoDB是一个非关系型数据库管理系统&#xff0c;它使用文档模型存储数据。MongoDB中的文档类似于JSON对象&#xff0c;可以…

总结899

目标规划&#xff1a; 月目标&#xff1a;6月&#xff08;线性代数强化9讲&#xff0c;背诵15篇短文&#xff0c;考研核心词过三遍&#xff09; 周目标&#xff1a;线性代数强化3讲&#xff0c;英语背3篇文章并回诵&#xff0c;检测 今日已做&#xff1a; 1.读了两篇文章&a…

Spring:InvalidDefinitionException: Direct self-reference leading to cycle

一、现象 一个列表接口报错&#xff0c;没有返回信息&#xff0c;异常堆栈如下&#xff1a; 11:52:05.096 [http-nio-8180-exec-36] ERROR c.u.s.f.w.e.GlobalExceptionHandler - [handleRuntimeException,65] - 请求地址XXXXX,发生未知异常. org.springframework.http.conve…

(el-Tree)操作:Element-plus 中Tree 树形控件的样式等的使用

Ⅰ、Element-plus 提供的Tree树形控件组件与想要目标情况的对比&#xff1a; 1、Element-plus 提供Tree组件情况&#xff1a; 其一、Element-ui 自提供的Table代码情况为(示例的代码)&#xff1a; // Element-plus 自提供的代码&#xff1a; // 此时是使用了 ts 语言环境&…