VS Code 使用 Makefile 运行 CPP项目

  • Installing the MinGW-w64 toolchain
  • CMake Tools
  • makelist.txt
    • 报错 1
    • 报错 2
    • 报错 3
    • 生成了 Makefile ,如何使用 make 命令

Installing the MinGW-w64 toolchain

参见文档 将 GCC 与 MinGW 结合使用

CMake Tools

参见文档 Linux 上的 CMake 工具入门

CMake 的使用

makelist.txt

报错 1

PS C:\Users\Admin\Downloads\...> cmake ./
CMake Error in CMakeLists.txt:
  Running

   'nmake' '-?'

  failed with:

   no such file or directory


CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage
CMake Error: CMAKE_CXX_COMPILER not set, after EnableLanguage
-- Configuring incomplete, errors occurred! 

在这里插入图片描述

  • CMakeLists.txt 文件中设置的 CMAKE_C_COMPILERCMAKE_CXX_COMPILER 变量是用来指定 C 和 C++ 编译器的路径的,它们不是用来指定生成器的。
  • 可以通过这些变量来告诉 C M a k e CMake CMake 要使用的编译器,但是 C M a k e CMake CMake 仍然需要一个生成器来生成相应的构建系统。

这个报错的原因是,在 CMakeLists.txt 文件中没有指定 C M a k e CMake CMake 的生成器( g e n e r a t o r generator generator),而 C M a k e CMake CMake 默认使用了 N M a k e   M a k e f i l e s NMake\ Makefiles NMake Makefiles 作为生成器。但是,你的系统中没有安装 n m a k e nmake nmake 工具,所以 C M a k e CMake CMake 无法找到它,导致报错。

要解决这个报错,可以在运行 C M a k e CMake CMake 时,使用 -G 选项来指定一个可用的生成器,例如 M i n G W   M a k e f i l e s MinGW\ Makefiles MinGW Makefiles V i s u a l S t u d i o Visual Studio VisualStudio。要确保系统中已经安装了相应的工具,例如 M i n G W MinGW MinGW M S V C MSVC MSVC

例如,可以在命令行中输入以下命令来使用 M i n G W   M a k e f i l e s MinGW\ Makefiles MinGW Makefiles 作为生成器:

cmake -G "MinGW Makefiles" ./            

运行 C M a k e CMake CMake 时,. 是当前文件夹,即源代码目录。应该指定包含 CMakeLists.txt 文件的目录。

报错 2

PS C:\Users\Admin\Downloads\....> cmake -G "MinGW Makefiles" ./
CMake Error: Error: generator : MinGW Makefiles
Does not match the generator used previously: NMake Makefiles
Either remove the CMakeCache.txt file and CMakeFiles directory or choose a different binary directory.

这个报错的原因是,在运行 C M a k e CMake CMake 时,指定了不同的生成器( g e n e r a t o r generator generator),而 C M a k e CMake CMake 会缓存之前使用的生成器的信息。如果想更换生成器,需要删除之前生成的文件,或者选择一个不同的构建目录。

要解决这个报错,可以按照以下的步骤操作:

  • 首先,需要在构建目录中删除 CMakeCache.txt 文件和 CMakeFiles 文件夹,这些文件是 C M a k e CMake CMake 生成的缓存文件,包含了之前使用的生成器的信息。
  • 其次,需要重新运行 C M a k e CMake CMake 命令,使用 -G 选项来指定想要使用的生成器,例如 M i n G W   M a k e f i l e s MinGW\ Makefiles MinGW Makefiles V i s u a l S t u d i o Visual Studio VisualStudio
  • 然后,需要使用相应的构建工具,例如 m i n g w 32 − m a k e mingw32-make mingw32make m s b u i l d msbuild msbuild,来编译和运行项目。

报错 3

PS C:\Users\Admin\Downloads\...> cmake -G "MinGW Makefiles" ./
-- The C compiler identification is GNU 13.1.0
CMake Error at CMakeFiles/3.28.1/CMakeCCompiler.cmake:1 (set):
  Syntax error in cmake code at

    C:/Users/Admin/Downloads/.../CMakeFiles/3.28.1/CMakeCCompiler.cmake:1

  when parsing string

    C:\msys64\ucrt64\bin\gcc.exe

  Invalid character escape '\m'.
Call Stack (most recent call first):
  CMakeLists.txt:9 (project)


-- Configuring incomplete, errors occurred!

这个报错的原因是,在 CMakeFiles/3.28.1/CMakeCCompiler.cmake 文件中使用了反斜杠来表示路径,而反斜杠在 C M a k e CMake CMake 中是一个转义字符,表示特殊的含义。例如,\m 表示换页符,而不是字母 m m m

要解决这个报错,可以在 CMakeFiles/3.28.1/CMakeCCompiler.cmake 文件中,将反斜杠替换为正斜杠 / ,这样 C M a k e CMake CMake 就不会将它们解释为转义字符。

例如,可以将 CMakeFiles/3.28.1/CMakeCCompiler.cmake 文件中的第一行:

set(CMAKE_C_COMPILER "C:\\msys64\\ucrt64\\bin\\gcc.exe")

修改为:

set(CMAKE_C_COMPILER "C:/msys64/ucrt64/bin/gcc.exe")

修改完后,需要重新运行 C M a k e CMake CMake 命令,就可以看到报错消失了,这表示你的设置已经生效了。

生成了 Makefile ,如何使用 make 命令

现在的问题是已经生成了 Makefile ,在 windows 中 如何使用 m a k e make make 命令。

PS C:\Users\Admin\Downloads\ADBS> make
make : 无法将“make”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。
所在位置 行:1 字符: 1
+ make -h
+ ~~~~
    + CategoryInfo          : ObjectNotFound: (make:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

在这里插入图片描述

找到 mingw32-make.exe 文件,
在这里插入图片描述

mingw32-make.exe 复制一份,副本命名为 make.exe,原来的不要删。

成功运行,如下:

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Excel 宏录制与VBA编程 —— 14、使用VBA处理Excel事件

简介 若希望特定事件处理程序在触发特定事件时运行,可以为 Application 对象编写事件处理程序。 Application 对象的事件处理程序是全局的,这意味着只要 Microsoft Excel 处于打开状态,事件处理程序将在发生相应的事件时运行,而不…

AI降痕工具:论文AI率的智能解决方案

告诉大家一个非常残忍的答案,以后所有论文都会被查ai率的。 学术界不仅关注传统的抄袭问题,还增加了一项名为“AIGC检测”的指标。例如知网、维普等平台都能检测论文AI率。 用GPT写论文虽然重复率基本不用担心,但是AI率基本都较高&#xff…

vue3组件通讯-介绍

简介 Vue 3 引入了多种强大的功能和改进,其中包括增强的组件通信机制。了解这些机制对于构建复杂、可维护的应用程序至关重要。下面,我们将介绍在 Vue 3 中组件通信的几种方法。 通讯类型 父子组件通信上下级通信(不仅父子级)兄…

通用大模型VS垂直大模型——最后还是要双赢

大模型的江湖争霸:通用与垂直,谁会先“拿下一城”? 哎呀,在人工智能这片神奇的沃土上,大模型(咱们说的可是那些超级聪明的“大脑”哦)正上演着一场别开生面的“武林大会”。一方是全能型选手—…

Java字符串处理深度解析:String、StringBuffer与StringBuilder的奥秘

摘要: 本文将深入探讨Java语言中处理字符串的基础构件:String、StringBuffer和StringBuilder。我们将详细讲解它们的内部原理、适用场景、性能对比以及在现代开发实践中的使用策略。同时,结合当下编程行业的热点技术,如微服务架构…

80、443端口不能开放也能为IP地址申请SSL证书!

IP地址证书作为一种特定的证书,不同于传统的域名验证证书,IP地址证书是通过验证IP地址来确保安全连接。在证书申请过程中,往往要求短暂开放80或者443端口,如果不能开放,IP地址证书则不能签发。 JoySSL提供的IP地址证书…

来聊聊Redis所实现的Reactor模型

写在文章开头 我们都知道解决C10k问题的最好方案就是通过在IO多路复用的基础上通过reactor模型实现高性能的网络并发程序,借助这个设计,redis的主线程也是基于IO多路复用以reactor模型的思路实现了一个高性能的单线程内存数据,本文将带领读者…

使用JAVA代码实现发送订阅消息以及模板消息

今天写了一个商品到货提醒的job任务,具体效果如下 这里用到了微信的发送订阅消息,主要代码是这一块的,最后我把发送了消息的订单存到表里,因为是定时任务,大家可不存 发送订阅消息 | 微信开放文档 /*** 微信平台-商品…

vue+canvas画布实现网页签名效果

1、签名自定义组件代码示例&#xff1a; qianMing.vue <template><!-- 容器&#xff0c;包含画布和清除按钮 --><div class"signature-pad-container"><!-- 画布元素&#xff0c;用于用户签名 --><canvasref"canvas" <!--…

领克杀入纯电赛道:年轻人想要一台什么样的大电轿?

‍作者 |老缅 编辑 |德新 6月12日&#xff0c;领克旗下首款纯电动车型在瑞典进行了全球首秀&#xff0c;该车正式定名为Z10。 Z10的字母「Z」&#xff0c;源自ZERO。 Zeal-激情&#xff0c;Enjoy-享受&#xff0c;Responsibility-责任&#xff0c;Original-原创&#xff0c;…

动态规划数字三角形模型——AcWing 275. 传纸条

动态规划数字三角形模型 定义 动态规划数字三角形模型是在一个三角形的数阵中&#xff0c;通过一定规则找到从顶部到底部的最优路径或最优值。 运用情况 通常用于解决具有递推关系、需要在不同路径中做出选择以达到最优结果的问题。比如计算最短路径、最大和等。 计算其他…

中国高分辨率土壤侵蚀因子K

土壤可蚀性因子&#xff08;K&#xff09;数据&#xff0c;基于多种土壤属性数据计算&#xff0c;所用数据包括土壤黏粒含量&#xff08;%&#xff09;、粉粒含量&#xff08;%&#xff09;、砂粒含量&#xff08;%&#xff09;、土壤有机碳含量&#xff08;g/kg&#xff09;、…

【新版本来袭】ONLYOFFICE桌面编辑器8.1 —— 重塑办公效率与体验

文章目录 一、功能完善的PDF编辑器&#xff1a;重塑文档处理体验编辑文本插入和修改各种对象&#xff0c;如表格、形状、文本框、图像、艺术字、超链接、方程式等添加、旋转和删除页面添加文本注释和标注 二、幻灯片版式设计&#xff1a;创意展示的无限舞台三、改进从右至左显示…

规则引擎-Aviator 表达式校验是否成立

目录 介绍特性使用更多文献支持 介绍 Aviator是一个轻量级、高性能的Java表达式执行引擎&#xff0c;它动态地将表达式编译成字节码并运行。 特性 支持绝大多数运算操作符&#xff0c;包括算术操作符、关系运算符、逻辑操作符、位运算符、正则匹配操作符(~)、三元表达式(?:…

接口防篡改+防重放攻击

接口防止重放攻击&#xff1a;重放攻击是指攻击者截获了一次有效请求(如交易请求),并在之后的时间里多次发送相同的请求&#xff0c;从而达到欺骗系统的目的。为了防止重放攻击&#xff0c;通常需要在系统中引入一种机制&#xff0c;使得每个请求都有一个唯一的标识符(如时间戳…

Go 如何使用指针灵活操作内存

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

华为的开发语言有2中,分别是ArkTS和仓颉,他们的区别是什么?

华为的开发语言有2中&#xff0c;分别是ArkTS和仓颉&#xff0c;他们的区别在哪呢&#xff1f; ArkTS和仓颉&#xff08;cangjie&#xff09;他们的区别是什么&#xff1f; 华为的仓颉和 ArkTS 是两种不同的编程语言&#xff0c;它们有以下区别&#xff1a; 设计目的&#xff1…

emoji控必备:制作一个emoji面板插件

说在前面 &#x1f4bb;在数字时代&#xff0c;emoji表情符号已成为很多人沟通的重要工具&#xff0c;但是输入法中的emoji表情包可能不太够用&#xff0c;所以很多时候我会到在线的网站去复制emoji&#xff0c;然后再回来粘贴&#xff0c;这样操作感觉有点繁琐&#xff0c;所以…

在线朋友圈系统(Java Web)

本项目是一个基于Java Web技术栈开发的在线朋友圈系统&#xff0c;提供用户注册、登录、动态发布与评论、好友发现与管理等功能。通过Spring Boot、MySQL、MyBatis、Sa-token以及LayUI等技术实现&#xff0c;确保系统具有良好的性能和扩展性。 技术栈 后端技术 Spring Boot: …

问题-python-爬虫无法爬取外网资源问题(python爬虫)

方法一&#xff1a; 这个报错通过关掉梯子就能解决&#xff0c;目前不清楚具体原理。 后续了解具体原理了&#xff0c;我会在这篇文章上更新具体分析—— 方法二&#xff1a; 也可以把这个东西打开&#xff0c;但是用完建议关掉。