【Window环境下使用MSYS2搭建CMake + MinGW环境】

news2025/1/11 17:00:39

目录标题

  • 安装`CMake`
    • `cmake` 测试
  • MSYS2
    • 下载`MSYS2`
    • 安装`MSYS2`
    • 修改软件下载源
  • MSYS2下安装MinGW
    • 配置`MinGW`配置到环境变量
  • `hello world`测试

安装CMake

Cmake下载地址:https://cmake.org/download/,下一个windows压缩包就好了,因为我比较喜欢自己来配置,免得不知道安装程序干了什么。当然也可以考虑下一个msi格式的。
cmake安装包
解压之后看到的目录结构是:
cmake目录结构
接下来需要将bin目录配置到环境变量Path中。

配置环境变量

cmake 测试

我们可以打开Windows终端,输入cmake测试。
cmake测试
如上,若cmake正常输出,则说明cmake已经成功安装了。

MSYS2

下载MSYS2

MSYS2的官网地址:https://www.msys2.org/
但是不太好的是 官网在国外,下载的速度可能会比较慢,建议使用清华的镜像来下载,清华镜像地址: https://mirrors.tuna.tsinghua.edu.cn/msys2/distrib/
我这里下载的是:https://mirrors.tuna.tsinghua.edu.cn/msys2/distrib/x86_64/msys2-x86_64-20221028.exe

安装MSYS2

安装就比较简单了,几乎傻瓜似的下一步、下一步就可以完成。就简单注意一下,第二步中的安装目录就好了:
安装目录。看别人将需要放到磁盘根目录, 我并没有,而是安装到了D:\dev\msys64下, 后续操作感觉没有什么异样。
安装完之后在Windows的开始菜单下可以看到如下的三个快捷方式:
快捷方式
点击·MSYS2 MSYS·,就可以运行出MSYS2的运行环境了。 也可以在安装目录中找到msys2.exe。进行运行。
可执行程序

修改软件下载源

软件下载源的配置文件在安装目录下的\msys64\etc\pacman.d文件夹下:
目录中有一个文件mirrorlist.msys, 该文件就是软件源的配置文件。内容大致如下, 可以把国内镜像的放前面来,加快下载的速度。

# See https://www.msys2.org/dev/mirrors

## Primary
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/msys/$arch/
Server = https://mirror.msys2.org/msys/$arch/
Server = https://repo.msys2.org/msys/$arch/

## Tier 1
Server = https://mirror.umd.edu/msys2/msys/$arch/
Server = https://mirror.yandex.ru/mirrors/msys2/msys/$arch/
Server = https://download.nus.edu.sg/mirror/msys2/msys/$arch/
Server = https://ftp.acc.umu.se/mirror/msys2.org/msys/$arch/
Server = https://ftp.nluug.nl/pub/os/windows/msys2/builds/msys/$arch/
Server = https://ftp.osuosl.org/pub/msys2/msys/$arch/

MSYS2下安装MinGW

打开MSYS2运行环境
运行环境
输入命令安装MingGw

 pacman -S mingw-w64-x86_64-gcc pkg-config

执行完成之后MSYS2目录下会多一个mingw64
另外还需要安装一下mingw64makecmake组件.

  1. 安装make组件
pacman -S mingw-w64-x86_64-make
  1. 安装·cmake·组件
pacman -S  mingw-w64-x86_64-cmake

配置MinGW配置到环境变量

mingw64bin目录配置到环境变量Path中。
path环境变量
否则后续cmake命令时无法找到CMAKE_MAKE_PROGRAM ,出现类似以下异常信息。

CMake Error: CMake was unable to find a build program corresponding to "MSYS Makefiles".  CMAKE_MAKE_PROGRAM is not set.  You probably need to select a different build tool.
CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage
CMake Error: CMAKE_CXX_COMPILER not set, after EnableLanguage
CMake Error: CMAKE_AR was not found, please set to archive program.
-- Configuring incomplete, errors occurred!
See also "D:/tmp/java/opencv/10_hello_mingw/build/CMakeFiles/CMakeOutput.log".

hello world测试

  1. 新建一个hello world目录,取名demo1吧.
  2. demo1目录下新建一个main.cpp程序文件, 写上hello world代码,如下:
#include <iostream>
using namespace std;
 
int main(){
	cout << "hello cmake!!!" <<  endl;
    
	return 0;
}

  1. 新建一个cmake配置文件CMakeLists.txt,内容如下:
cmake_minimum_required(VERSION 3.2)
project(hello_mingw)
set(CMAKE_AR  D:/dev/msys64/mingw64/bin/ar.exe)
set(CMAKE_C_COMPILER  D:/dev/msys64/mingw64/bin/gcc.exe)
set(CMAKE_CXX_COMPILER  D:/dev/msys64/mingw64/bin/g++.exe)
add_library
add_executable(main main.cpp)
  1. 新建一个build目录, 以免代码混乱。
    测试目录

  2. build目录下使用,执行命令:

cmake -G "MinGW Makefiles" ..

cmake配置环境
6. 在build目录下使用, 执行命令,进行编译。

cmake --build .

编译
7. 执行main.exe
执行demo程序
9. 从上可以看到hello cmake!!!。被输出,程序执行成功。

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

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

相关文章

嵌入式软件开发知识点总结-uboot文件系统

【推荐阅读】 浅析linux 系统进程冻结&#xff08;freezing of task&#xff09; 30分钟了解linux操作系统内核总结 深入linux内核架构--进程&线程 需要多久才能看完linux内核源码&#xff1f; 概述Linux内核驱动之GPIO子系统API接口 Uboot 什么是bootloader&#xff1f; …

Linux操作系统~进程崩溃的原理是什么?信号的产生方式有哪些?

目录 1.信号的概念 2.signal函数的使用 kill -l 自定义信号处理函数signal函数 3.进程异常/崩溃的原理 &#xff08;1&#xff09;.进程为什么会崩溃&#xff1f; &#xff08;2&#xff09;.如何知道进程崩溃/异常的原因 &#xff08;3&#xff09;.core dump的作用—…

C++类设计和实现的十大最佳实践

C代码提供了足够的灵活性&#xff0c;因此对于大部分工程师来说都很难把握。本文介绍了写好C代码需要遵循的10个最佳实践&#xff0c;并在最后提供了一个工具可以帮助我们分析C代码的健壮度。原文&#xff1a;10 Best practices to design and implement a C class 1. 尽可能尝…

Word处理控件Aspose.Words功能演示:使用 C# 将 Word 文档转换为 HTML

在各种情况下&#xff0c;您需要在 Web 或桌面应用程序中显示 Word 文档的内容。在这种情况下&#xff0c;合适的选项之一是将 Word 文档转换为HTML。为了在 .NET 应用程序中实现这一点&#xff0c;本文介绍了如何使用 C# 将 Word DOCX或DOC文件转换为 HTML。此外&#xff0c;您…

搅拌釜反应器全自动真空压力(正负压)控制解决方案

摘要&#xff1a;针对双层玻璃反应釜中存在的无法进行真空压力自动和准确控制等问题&#xff0c;本文提出了完整和成熟的解决方案&#xff0c;即采用卫生级电动调节阀和高精度双通道PID控制器&#xff0c;结合不同量程的真空计&#xff0c;与反应器、真空泵和正压气源构成闭环控…

ARP协议与ARP欺骗

一、ARP协议&#xff08;地址解析协议&#xff09; 所谓“地址解析”就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程,ARP协议的基本功能就是通过目标设备的IP地址&#xff0c;查询目标设备的MAC地址&#xff0c;以保证通信的顺利进行。 将一个已知的IP地址解析为MAC…

169. 基于Django-RESTFramework的节流的使用

1.节流概述 节流又称限流&#xff0c;限制访问。 就是一个用户多次发送一个请求&#xff08;页面或者链接&#xff09;的时候&#xff0c;单位时间允许访问次数限制&#xff0c;超过限制就会出现访问受限&#xff0c;提示譬如&#xff1a;离下一场访问还有多久之类等的字样。 …

基于SSM的学生考勤管理系统的设计与实现

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…

【学习笔记】顺序容器的表格方式总结 C++

目录顺序容器及其特点顺序容器操作向顺序容器添加元素insertemplace参考更新中… 顺序容器及其特点 名字访问元素插入&#xff0c;删除元素vector&#xff08;可变大小数组&#xff09;支持快速随机访问在尾部之外的位置插入或删除元素可能很慢deque&#xff08;双端队列&…

SpringBoot实战:整合MapStruct实现数据类型转化

MapStruct 是一个代码生成器&#xff0c;它基于约定优于配置方法极大地简化了 Java bean 类型之间映射的实现。自动生成的映射转换代码只使用简单的方法调用&#xff0c;因此速度快、类型安全而且易于理解阅读&#xff1b;本篇就是实现 SpringBoot 整合 MapStruct 实现数据类型…

[附源码]JAVA毕业设计小区物业管理系统演示录像2020(系统+LW)

[附源码]JAVA毕业设计小区物业管理系统演示录像2020&#xff08;系统LW&#xff09; 项目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09…

ffmpeg库安装及入门指南(Windows篇)- 2022年底钜献

最近项目需要&#xff0c;使用了 ffmpeg 做摄像头视频采集和串流。这几天有点时间&#xff0c;打算把相关的一些知识记录分享一下。 在撰写本文时&#xff0c;我又在另外一台电脑上把 ffmpeg 重新安装了一遍&#xff0c;所以绝对真实靠谱&#xff01;如果你觉得文章写得还不错…

代码效果测试

ROBUST TEXT DETECTION IN NATURAL IMAGES WITH EDGE ENHANCED MAXIMALLY STABLE EXTREMAL REGIONS 代码地址&#xff1a;https://github.com/akab/TextDetection 基本步骤&#xff1a; 1&#xff09;将原图转为灰度图&#xff1b; 2&#xff09;使用OpenCV的canny函数进行边…

HTML -- 常用标签及示例总结

文章目录HTML常用标签1 标签语义1.1 标签属性2 标题标签 h1 - h63 段落和换行标签3.1 段落标签3.2 换行标签4 文本格式化标签5 div和span6 图像标签7 超链接标签7.1 链接的语法格式7.2 链接分类8 表格标签8.1 表格的主要作用8.2 表格的基本语法8.3 表头单元格标签8.4 表格属性8…

C语言随机数的产生(rand、srand、time函数细节讲解)

✨C语言随机数的产生随机数生成代码&#xff1a;rand函数&#xff1a;srand函数&#xff1a;time函数&#xff1a;time函数补充:time_t类型讨论time_t指针传入的讨论&#xff1a;随机数生成代码&#xff1a; 先上代码&#xff0c;再详细解释&#xff1a; #include<stdio.h…

Python数组数据处理办法清单

import numpy as np import pandas as pd import matplotlib.pyplot as plt#matplotlib 的字体&#xff08;font&#xff09;为黑体&#xff08;SimHei&#xff09; plt.rcParams[font.sans-serif] [SimHei, ] # matplotlib正确显示正负号 plt.rcParams[axes.unicode_minus] …

dfs序(树形结构线性化)

dfs序是将树形结构转换为线性结构的一种方式。 dfs序 dfs序&#xff1a; 指每个节点在dfs深度优先遍历中的进出栈的时间序列。 定义三个数组&#xff1a; in[x]&#xff1a;表示结点x 入栈的时间戳。 out[x]&#xff1a;表示结点x出栈的时间戳&#xff0c;特殊的&#xff0c;出…

Linux网络原理及编程(5)——第十五节 TCP的连接(三次握手、四次挥手)

目录 三次握手 四次挥手 我们来重点说说两个状态&#xff1a;CLOSE_WAIT和TIME_WAIT 【CLOSE_WAIT】 【TIME_WAIT】 各位好&#xff0c;博主新建了个公众号《自学编程村》&#xff0c;拉到底部即可看到&#xff0c;有情趣可以关注看看哈哈&#xff0c;关注后还可以加博主w…

Linux CENTOS安装mysql8 64位

1. 查看系统中是否已经安装了mariadb 执行&#xff1a;yum list installed | grep mariadb 若已经存在&#xff0c;则删除 执行&#xff1a; yum remove mariadb 2.下载需要安装的压缩文件&#xff0c;从官网下载&#xff0c;文件为名字为 mysql-8.0.31-linux-glibc2.12-x86_6…

S7-1200和1500PLC与条码枪建立TCP_IP通信的具体方法示例

S7-1200和1500PLC与条码枪建立TCP_IP通信的具体方法示例 今天和大家分享西门子S7-1200和1500PLC如何获取条码枪的扫描数据,这种案例中一般PLC作为TCP/IP的客户端(只接收数据,不发送数据),条码枪作为TCP/IP的服务器。 如下图所示,在指令—通信—开放式用户通信中可以找到相关…