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 directoryCMake 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 atC:/Users/Admin/Downloads/.../CMakeFiles/3.28.1/CMakeCCompiler.cmake:1when parsing stringC:\msys64\ucrt64\bin\gcc.exeInvalid 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,原来的不要删。

成功运行,如下:

在这里插入图片描述

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

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

相关文章

关于Pycharm右下角不显示解释器interpreter的问题解决

关于Pycharm右下角不显示解释器interpreter的问题 在安装新的Pycharm后,发现右下角的 interpreter 的选型消失了: 觉得还挺不习惯的,于是网上找解决办法,无果。 自己摸索了一番后,发现解决办法如下: 勾…

37岁,被裁员,失业三个月,被面试官嫌弃“太水”:就这也叫10年以上工作经验?

今年部门要招两个自动化测试,这几个月我面试了几十位候选人。发现一个很奇怪的现象,面试中一问到元素定位、框架api、脚本编写之类的,很多候选人都对答如流。但是一问到实际项目,比如“项目中UI自动化和接口自动化如何搭配使用&am…

电商平台家电以旧换新销售额增长超80%

记者近日从国家发展和改革委员会举办的新闻发布会上获悉,今年1—5月份,主要电商平台家电以旧换新销售额增长超过80%,以旧换新成为推动家电消费增长的重要因素。 今年3月,国务院印发了《推动大规模设备更新和消费品以旧换新行动方…

天花板国际幼儿园是怎样的?一起来听听天津惠灵顿幼儿园园长分享

上周,天津惠灵顿幼儿园举行了精彩的毕业典礼。一如往常,这是一个回顾过去、展望未来的机会。这届毕业班有一些孩子是四年前园长加入惠灵顿学校的时入园的。他们从小小班启航,在这所天津国际幼儿园开始了他们的惠灵顿之旅。四年来,…

java基于ssm+jsp 班级同学录网站

1前台首页功能模块 班级同学录网站,在前台首页可以查看首页、公告信息、校友风采、论坛信息、我的、跳转到后台、客服等内容,如图1所示。 图1前台首页功能界面图 用户注册,在用户注册页面可以填写用户名、姓名、头像、性别、手机号码、邮箱等…

[leetcode]unique-paths 不同路径

. - 力扣&#xff08;LeetCode&#xff09; class Solution { public:int uniquePaths(int m, int n) {vector<vector<int>> f(m, vector<int>(n));for (int i 0; i < m; i) {f[i][0] 1;}for (int j 0; j < n; j) {f[0][j] 1;}for (int i 1; i &l…

站在巨人的肩膀上 C语言理解和简单练习(包含指针前的简单内容)

1.格式化的输入/输出 1.1printf函数 printf函数你需要了解的就是转换说明&#xff0c;转换说明的作用是将内存中的二进制转换成你所需要的格式入%d就是将内存中存储的变量的二进制转化为十进制并打印出来&#xff0c;同时我们可以在%X的转换说明对精度和最小字段宽度的指定&a…

ORA-6544[pevm_peruws_callback-1][604] is caused (Doc ID 2638095.1)

ORA-6544[pevm_peruws_callback-1][604] is caused (Doc ID 2638095.1)​编辑To Bottom In this Document Symptoms Cause Solution References Applies to: Oracle Database - Enterprise Edition - Version 12.2.0.1 and later Information in this document applies to an…

C++并发之环形队列(ring,queue)

目录 1 概述2 实现3 测试4 运行 1 概述 最近研究了C11的并发编程的线程/互斥/锁/条件变量&#xff0c;利用互斥/锁/条件变量实现一个支持多线程并发的环形队列&#xff0c;队列大小通过模板参数传递。 环形队列是一个模板类&#xff0c;有两个模块参数&#xff0c;参数1是元素…

[学习笔记] 禹神:一小时快速上手Electron笔记,附代码

课程地址 禹神&#xff1a;一小时快速上手Electron&#xff0c;前端Electron开发教程_哔哩哔哩_bilibili 笔记地址 https://github.com/sui5yue6/my-electron-app 进程通信 桌面软件 跨平台的桌面应用程序 chromium nodejs native api 流程模型 main主进程 .js文件 node…

Verilog HDL语法入门系列(二):Verilog的语言文字规则

目录 1 空白符和注释2 整数常量和实数常量3 整数常量和实数常量4 字符串&#xff08;string)5 格式符与转义符6 标识符(identifiers) 微信公众号获取更多FPGA相关源码&#xff1a; 1 空白符和注释 2 整数常量和实数常量 Verilog中&#xff0c;常量(literals)可是整数也可以是…

照片放大工具Topaz Gigapixel AI for Mac v7.1.2

Topaz Gigapixel AI软件是一款相当高效的PC端图像大小调整工具&#xff0c;更是一款能够为摄影师、设计师以及图像处理爱好者带来革命性体验的强大软件。它凭借先进的深度学习技术&#xff0c;打破了传统图像大小调整的限制&#xff0c;实现了真正意义上的无损放大和图像恢复。…

服务器硬件及RAID配置

目录 一、RAID磁盘阵列 1.概念 2.RAID 0 3.RAID 1 4.RAID 5 5.RAID 6 6.RAID 10 二、阵列卡 1.简介 2.缓存 三、创建 1.创建RAID 0 2.创建RAID 1 3.创建RAID 5 4.创建RAID 10 四、模拟故障 一、RAID磁盘阵列 1.概念 &#xff08;1&#xff09;是Redundant Array …

游戏服务器研究二:大世界的 scale 问题

这是一个非常陈旧的话题了&#xff0c;没什么新鲜的&#xff0c;但本人对 scale 比较感兴趣&#xff0c;所以研究得比较多。 本文不会探讨 MMO 类的网游提升单服承载人数有没有意义&#xff0c;只单纯讨论技术上如何实现。 像 moba、fps、棋牌、体育竞技等 “开房间类型的游戏…

调幅信号AM的原理与matlab实现

平台&#xff1a;matlab r2021b 本文知识内容摘自《软件无线电原理和应用》 调幅就是使载波的振幅随调制信号的变化规律而变化。用音频信号进行调幅时&#xff0c;其数学表达式可以写为: 式中&#xff0c;为调制音频信号&#xff0c;为调制指数&#xff0c;它的范围在(0&…

关于读完《额尔古纳河右岸》后的一些感受

一点废话 我本是一个喜欢读书的人&#xff0c;爱读那些有深意的书籍&#xff0c;而非现在这些《数据结构》、《LINUX 高级编程》、《编译原理》等技术性书籍。读它们时&#xff0c;我的的目的性很强&#xff0c;就是想了解它&#xff0c;思考如何运用到工作中。虽然时常也会因…

Android上编译和使用curl

1 概述 Android系统编译的时候默认是没有带curl工具的&#xff0c;但是在aosp源码中&#xff0c;却是有curl的源码包含。所以只需要编译curl&#xff0c;然后将其push到Android设备中&#xff0c;就可以使用curl命令了。 2 编译curl 这里编译curl是在整机代码环境下进行编译…

Qt添加Dialog对话框

Qt版本&#xff1a;5.12.12 1.添加【模块】 Base class&#xff1a;可以选择QDialog、QWidget、QMainWindow 会自动生成MyDialog.h和MyDialog.cpp文件以及MyDialog.ui文件&#xff0c; 2.添加代码&#xff1a; &#xff08;1&#xff09;TestDialog.h #pragma once#include…

HarmonyOS开发 - 日志打印

在程序开发过程中&#xff0c;日志输出是不可或缺的一部分。能有效的记录和分析日志数据&#xff0c;使开发人员可以更好地了解程序的运行状况、解决问题、优化性能并满足合规性要求等。 当程序出现错误或异常时&#xff0c;日志记录输出可以帮助开发人员快速定位问题发生的位置…

CppInsights: 学习C++模版的神器

CppInsights&#xff1a;深入理解C代码的利器 C是一门强大而复杂的编程语言&#xff0c;其复杂性主要体现在语言的多层次抽象和丰富的语法特性上。尽管这些特性使得C能够高效地处理复杂的任务&#xff0c;但也给开发者带来了理解和调试代码的巨大挑战。CppInsights正是在这一背…