首页 > 其他分享 >cmake开发环境--msys2搭建

cmake开发环境--msys2搭建

时间:2023-04-13 22:24:36浏览次数:46  
标签:msys2 cmake x86 -- w64 编译 mingw 64

前言

在日常移植算法的过程中,由于Microsoft Visual Studio无法安装,导致需要自己搭建个C语言开发环境。

最开始使用VScode上的通过C/C++直接编译,虽然简单方便,但对于多文件,多路径下的,则需要编写task.json文件编译C文件,增加一个文件,就需要写入编译,过于麻烦。

后使用小熊猫C++,虽然集成化的IDE,能够自动生成makefile文件,但还是需要手动添加编译文件,且软件不易阅读代码。

现在选择使用的是VScode+Cmake。接下来对于Cmake相关使用和应用展开说明。

① Make与CMake

首先先来了解一下gcc,gcc是GNU Compiler Collection(就是GNU编译器套件),也可以简单认为是编译器,它可以编译很多种编程语言(包括C、C++、Objective-C、Fortran、Java等等)。当我们的程序只有一个源文件时,直接就可以用gcc命令编译它。

但是当程序包含很多源文件时,用gcc命令逐个去编译时,就很容易混乱而且工作量大。所以就出现了Make工具。它是一个自动化编译工具,我们可以使用一条命令实现完全编译,但是需要编写一个规则文件,Make工具依据它来批量处理编译,这个文件就是Makefile文件。Makefile在一些简单的工程完全可以人工手写,但是当工程非常大的时候,手写Makefile也是非常麻烦的,如果换了个平台Makefile又要重新修改。(win下和linux下makefile语法有部分不同)

这个时候出现了CMake这个工具,CMake能够输出各种各样的Makefile或者project文件,从而帮助程序员减轻负担。但是随着而来的也是需要编写CMakeLists文件。当然CMake还有其他功能,就是可以跨平台生成对应能用的Makefile,我们不需要自己再去修改。

② 利用VScode搭建Cmake开发环境

1.MSYS2安装

官网下载
国内镜像下载

双击打开 msys2-x86_64-20221028.exe

直接一路安装就可以了

2.配置环境

1.添加环境变量

打开环境变量

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

根据自己的MSYS2安装路径修改

2.配置MSYS2环境

从“开始”菜单栏中找到“MSYS2 MSYS"并运行

在这里插入图片描述

#下面几条命令为安装必要插件
pacman -Syu
pacman -S mingw-w64-x86_64-gcc mingw-w64-x86_64-gdb mingw-w64-x86_64-cmake mingw-w64-x86_64-make
pacman -S mingw-w64-x86_64-toolchain
pacman -S mingw-w64-x86_64-clang
pacman -S mingw-w64-x86_64-yasm mingw-w64-x86_64-nasm
pacman -S mingw-w64-x86_64-freetype
#下面几条命令根据需求来,装自己想要的
pacman -S mingw-w64-x86_64-opencv
pacman -S mingw-w64-x86_64-ffmpeg mingw-w64-x86_64-ffms2
pacman -S mingw-w64-x86_64-libwebsockets
...

在安装过程中如遇以下提示,按下回车全部安装

Enter a selection (default=all):

在安装过程中如遇以下提示,输入“Y”选择继续安装

:: Proceed with installation? [Y/n]

验证环境:

win+R打开运行 输入CMD 确定

img

输入

cmake  --version

img

环境安装完成

3.配置VScode

安装CMake Tools扩展

在这里插入图片描述

在扩展设置中配置以下选项:

在这里插入图片描述

在这里插入图片描述

MSYS2安装目录一致

在这里插入图片描述

重启VSCode,会自动启动cmake(如果没有,按下Ctrl+Shift+P,输入CMake: configure

在这里插入图片描述

不想自动启动可以选择扩展设置里关闭

img

至此,环境搭建已经完成.

③ Cmake简单语法介绍

cmake_minimum_required(VERSION 3.19)#选择最低版本
project(HR_C VERSION 0.1.0)#工程名称

message("-- " ${PROJECT_NAME} " " ${CMAKE_CXX_COMPILER})#类似于 log

set(CMAKE_CXX_STANDARD 11) #选择c++版本 c++ 11

add_executable(HR_C "") # 添加可执行文件
#添加头文件目录,相当于把路径添加到环境变量中。
target_include_directories(HR_C PUBLIC ./algorithm ./)

file(GLOB SRCS CONFIGURE_DEPENDS *.cpp ./algorithm/*.c)
file(GLOB HEAD CONFIGURE_DEPENDS *.h ./algorithm/*.h)
#message(${SRCS})
#message(${HEAD})
#C++的源文件指定为Private,是因为源文件只是在构建库文件是使用,头文件指定为Public是因为构建和编译时都会使用。
target_sources(HR_C PRIVATE ${SRCS} PUBLIC ${HEAD})

文件目录结构如下:

├─.idea					// clion 配置
├─.vscode			   // vscode 配置	
├─build				  // cmake默认生成输出			
├─cmake-build-debug  // clion生成的输出文件
└─algorithm
│      cs_heart.c
│      cs_heart.h
│      cs_log.c
│      cs_log.h
│      HR_data_process.c
│      HR_data_process.h
│      types.h
│  .gitignore
│  CMakeLists.txt
│  filehandler.cpp
│  filehandler.h
│  main.cpp
│  ppg_case_handler.cpp
│  ppg_case_handler.h
│  ppg_csv_reader.h

这里举例一个路径复杂的工程:lvgl的window模拟器CMakeLists.txt:

详细工程可以参考我的开源的一个项目:LVGL_Simulation里面VScode文件工程 即采用如下编写。

cmake_minimum_required(VERSION 3.25)
project(LVGL)

#  SET(CMAKE_C_COMPILER "D:/ProgramFiles/LLVM/x86/bin/clang.exe")
#  SET(CMAKE_CXX_COMPILER "D:/ProgramFiles/LLVM/x86/bin/clang++.exe")

message("-- " ${PROJECT_NAME} " " ${CMAKE_CXX_COMPILER})

set(CMAKE_CXX_STANDARD 20) #1

file(GLOB_RECURSE HEADERS lv_examples/*.h lv_drivers/*.h lvgl/*.h lv_conf.h lv_ex_conf.h lv_drv_conf.h)
file(GLOB_RECURSE SOURCES lv_examples/*.c lv_drivers/*.c lvgl/*.c main/*.c)
include_directories(.  ./lvgl sdl2/include)
link_directories(sdl2/lib)
#message(${HEADERS})
#message(${SOURCES})
add_executable(LVGL  ${HEADERS} ${SOURCES})

target_link_libraries(LVGL libSDL2)

后记

以前都是使用集成化的IDE,导致突然要使用编辑一个简单的代码反而没办法编译了,采用这种方式后反而有利于跨平台使用,也更加深入的了解了代码是如何编译的。

参考文章:

标签:msys2,cmake,x86,--,w64,编译,mingw,64
From: https://www.cnblogs.com/tangwc/p/17316750.html

相关文章

  • MATLAB代码:基于条件风险价值CVaR的微网动态定价与调度策略
    MATLAB代码:基于条件风险价值CVaR的微网动态定价与调度策略关键词:P2P交易微网优化调度条件风险价值合作博弈动态定价参考文档:加好友获取仿真平台:MATLAByalmip+cplex+mosek主要内容:代码主要做的是一个基于主从博弈的考虑差别定价和风险管理的微网动态定价与调度策略,构建了......
  • MATLAB代码:基于分时电价条件下家庭能量管理策略研究
    MATLAB代码:基于分时电价条件下家庭能量管理策略研究关键词:家庭能量管理模型分时电价空调电动汽车可平移负荷仿真平台:MATLAB+CPLEX平台主要内容:代码主要做的是家庭能量管理模型,首先构建了电动汽车、空调、热水器以及烘干机等若干家庭用户用电设备的能量管理模型,其次,考虑在......
  • Vulnhub Joy Walkthrough
    Recon这台靶机对枚举的要求较高,如果枚举不出有用的信息可能无法进一步展开,我们首先进行普通的扫描。┌──(kali㉿kali)-[~/Labs/Joy/80]└─$sudonmap-sS-sV-p-192.168.80.136StartingNmap7.93(https://nmap.org)at2023-04-1022:42EDTNmapscanreportfor......
  • Flex| 流式 布局 ,让元素两端居左,居右,别再用float:right了
    主要代码是.parent{ justify-content:space-between; }}完整代码案例.tasklist{height:calc(80vh);overflow-y:auto;overflow-x:hidden;border:1pxsolid#ccc;border-radius:4px;}.taskhead{display:flex;height:50px;......
  • MATLAB代码:基于多目标遗传算法的分布式电源选址定容研究
    MATLAB代码:基于多目标遗传算法的分布式电源选址定容研究关键词:分布式电源选址定容多目标遗传算法  参考文档:《店主自写文档》基本复现;仿真平台:MATLAB主要内容:代码主要做的是基于多目标遗传算法的分布式电源选址定容模型,首先构建了含义分布式电源的配电网基本结构,对分布......
  • 第二章部分习题
    用穷举法找出1~100中的质数代码:usingnamespacestd;intmain(){intk=1;for(inti=1;i<=99;i++){k++;inta=0;for(intj=2;j<=i/2;j++){if(k%j==0){......
  • 微服务拆分与ribbon的配置
    微服务思想【个人拙见】:将面向流程的业务转成面向业务的业务,也就是将业务划分为各个业务之间相互调用,从网关进入,通过网关实现微服务的转发与调用。服务拆分创建两个模块,一个是user,一个是order,但是一个订单对应一个用户,一个用户对应多个订单,创建以下实体类:在创建订单类的时候发现......
  • Linux运维进阶之路
    前言首先在我看来,不论你以后是做运维亦或者是做后端开发,云计算等。只要和后端搭边,Linux都是必会的基础知识。所以说Linux是伴随我们工作中一个特别重要的知识。 不过很多同学在初学Linux的时候,始终不得其法,发现越学越摸不着头脑。到最后不了了之。   在我看来,这些同学......
  • Linux运维进阶之路
    前言首先在我看来,不论你以后是做运维亦或者是做后端开发,云计算等。只要和后端搭边,Linux都是必会的基础知识。所以说Linux是伴随我们工作中一个特别重要的知识。 不过很多同学在初学Linux的时候,始终不得其法,发现越学越摸不着头脑。到最后不了了之。   在我看来,这些同学......
  • Linux运维进阶之路
    前言首先在我看来,不论你以后是做运维亦或者是做后端开发,云计算等。只要和后端搭边,Linux都是必会的基础知识。所以说Linux是伴随我们工作中一个特别重要的知识。 不过很多同学在初学Linux的时候,始终不得其法,发现越学越摸不着头脑。到最后不了了之。   在我看来,这些同学......