我用nmake编译代码提示错误:fatal error U1052: 未找到文件“\makefile.def”,经过排查发现是代码依赖WDK,所以研究了一下WDK的安装步骤,下面是具体步骤:

请遵循以下步骤来为你的 VS2019 搭建完整的驱动开发环境:

第 1 步:确认 Visual Studio 2019 工作负载

首先,确保你的 VS2019 已经安装了 “使用 C++ 的桌面开发” 工作负载。这是基础。

  1. 打开 Visual Studio Installer

  2. 找到你的 Visual Studio 2019 产品,点击 “修改”

  3. 在 “工作负载” 选项卡中,确保 “使用 C++ 的桌面开发” 已被勾选。

  4. 点击 “修改” 按钮完成更改(如果需要)。

第 2 步:下载并安装 WDK

WDK 是通过一个独立的安装程序分发的,这个安装程序会智能地检测你的 VS2019 并进行集成。

  1. 访问官方下载页面
    这是最重要的步骤。前往微软官方文档页面:
    下载 Windows Driver Kit (WDK)

  2. 选择与你的目标系统匹配的版本

    • 页面会提供最新版本的 WDK 下载链接。

    • 非常重要:你下载的 WDK 版本必须与你想要编译的驱动程序所目标运行的 Windows 版本兼容。例如,要开发 Win11 驱动,就下载最新的 WDK。

  3. 运行安装程序

    • 下载完成后,运行 wdksetup.exe

    • 安装程序会自动检测到你系统已安装的 Visual Studio 2019。

    • 它还会检查并可能会引导你安装所需版本的 Windows SDK(如果尚未安装)。WDK 依赖于特定版本的 Windows SDK,安装程序会帮你处理好这个依赖关系。

    • 跟随安装向导的提示完成安装即可。

第 3 步:验证安装

安装完成后,通过最有效的方法验证:

  1. 打开 Visual Studio 2019

  2. 点击 “创建新项目”

  3. 在右侧的搜索框中输入 driver 进行搜索。

  4. 如果你能看到以下模板,说明 WDK 已成功安装并集成:

    • Kernel Mode Driver, Empty (KMDF)

    • Kernel Mode Driver (WDM)

    • User Mode Driver (UMDF)

    • Empty WDM Driver

    https://learn.microsoft.com/zh-cn/windows-hardware/drivers/download-images/vs2019-new-project.png


如果你已经安装了WDK,但之前编译仍出错

考虑到你之前遇到的 nmake 和 makefile.def 的错误,即使安装了WDK,也请务必通过正确的入口启动开发环境

不要直接从开始菜单打开 Visual Studio 2019 或普通的命令提示符。

  1. 在 开始菜单 中,找到 Visual Studio 2019 的文件夹。

  2. 在其中选择 “x64 Native Tools Command Prompt for VS 2019” 或 “Developer Command Prompt for VS 2019”

    • 对于驱动开发,强烈推荐使用 x64 Native Tools ...

  3. 在这个特殊的命令提示符窗口中,导航到你的驱动项目目录。

  4. 再次运行 nmake 命令。

这个特殊的命令提示符已经为你设置好了所有必要的环境变量(包括 PATHINCLUDELIBNTMAKEENV),所以它能找到 makefile.def 和你需要的所有编译器、链接器。

总结

项目情况
VS2019 默认带WDK吗?不带,需要额外安装。
如何安装?从 微软官方 Learn 站点 下载 wdksetup.exe 并运行。
安装关键点安装程序会自动集成到已存在的 VS2019 中,并处理 Windows SDK 的依赖。
验证方法在 VS2019 中创建新项目,能搜到驱动模板即为成功。
运行环境必须使用 x64 Native Tools Command Prompt for VS 2019 来运行 nmake 或构建传统驱动项目。

遵循这个流程,你的 VS2019 就能完美地编译驱动程序项目了。

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

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

相关文章

使用 Apache Flink CDC 3.0 实现 MySQL 到 Elasticsearch 的数据同步

下面我将创建一个完整的 Spring Boot 项目,使用 Flink CDC 3.0 基于 MySQL 的 binlog 实现数据同步到 Elasticsearch。 项目概述 这个项目将: 使用 Flink CDC 连接 MySQL 并读取 binlog处理数据变化(插入、更新、删除)将数据同步到…

Web网站的运行原理2

请求Web网站的文件-HTTP 可以使用HTTP协议在Web浏览器和Web服务器应用程序之间传输Web网页的文件。 在进行HTTP传输之前,需要先在Web浏览器和Web服务器应用程序之间建立TCP连接。 使用HTTP请求可以要求Web浏览器向Web服务器应用程序传输文件。 传输Web网站的文件-HT…

论文阅读:Do As I Can, Not As I Say: Grounding Language in Robotic Affordances

地址:Do As I Can, Not As I Say: Grounding Language in Robotic Affordances 摘要 大型语言模型(LLM)能够编码丰富的世界语义知识,这类知识对于机器人执行自然语言表达的高层级、时间扩展指令具有重要价值。然而,语…

Django管理后台结合剪映实现课件视频生成应用

在教学内容的数字化制作中,如何将课件与音频快速转换为视频是一项高频需求。借助管理后台和剪辑工具,可以实现课件内容的下载、转换和草稿生成,大幅减少重复操作。 【AI教育教学考试系统】课件在线剪映视频草稿生成应用这里实现的课件PPT部分…

AI升级社区便民服务:AI办事小程序高效办证+应急系统秒响应,告别跑腿愁住得更安心

朋友,你有没有在社区办过事?想给孩子办入学证明,得先跑居委会开证明,再去街道办事处盖章,来回几趟不说,要是材料没带全,还得重新跑;家里水管爆了,半夜联系物业&#xff0…

el-table-draggable拖拽实现表格内容排序

1、图片2、安装包import ElTableDraggable from "el-table-draggable";3、代码&#xff08;html&#xff09;<el-table-draggable:data"soloTableData"input"dragInputHandlerSolo"><el-table:data"soloTableData"row-key&qu…

Linux设备模型技术路线图

Linux设备模型涉及的技术和知识点 1. 核心架构组件 1.1 Kobject 子系统 kobject(内核对象):Linux设备模型的基础构建块 kset(对象集合):kobject的容器,管理相同类型的对象 ktype(对象类型):定义kobject的行为和属性 引用计数机制:使用kref管理对象生命周期 对象层…

面试问题详解六:元对象系统调用槽函数

Qt 的 元对象系统&#xff08;Meta-Object System&#xff09; 是 Qt 核心机制之一&#xff0c;正是它让 C 语言具备了类似脚本语言&#xff08;如 Python&#xff09;的反射、动态绑定、属性系统等能力。 自定义信号与槽&#xff0c;是 Qt 元对象系统最常见、最实用的体现。&a…

Scala面试题及详细答案100道(1-10)-- 基础语法与数据类型

《前后端面试题》专栏集合了前后端各个知识模块的面试题,包括html,javascript,css,vue,react,java,Openlayers,leaflet,cesium,mapboxGL,threejs,nodejs,mangoDB,SQL,Linux… 。 前后端面试题-专栏总目录 文章目录 一、本文面试题目录 1. 简述Scala与Java的主要…

http请求有哪些?

TTP请求方法常见方法&#xff1a;GET&#xff1a;获取资源&#xff0c;参数通过URL传递&#xff0c;可缓存到浏览器本地。POST&#xff1a;提交数据&#xff0c;参数通过请求体传递&#xff0c;不可缓存&#xff0c;常用于创建资源。PUT&#xff1a;更新资源&#xff0c;参数通…

MAPGIS6.7地质编录

1.编录文件excel位于D:\mapgis67\program\section&#xff0c;文件名称&#xff1a;ZKInfoEdit.xls2生成副本&#xff0c;复制ZKInfoEdit.xls到桌面3开始编写 04回次4开始编写 03编录5开始编写 11采样6开始编写 06标志面7开始编写 10钻孔资料8 最后总结 …

轻松掌握Chrome插件开发全流程

Chrome插件开发概述介绍Chrome插件的基本概念、核心功能和应用场景&#xff0c;包括插件与浏览器扩展的区别、插件的主要组成部分&#xff08;如manifest文件、后台脚本、内容脚本等&#xff09;。开发环境搭建列出开发Chrome插件所需的工具和环境配置&#xff0c;包括Chrome浏…

智能二维码QR\刷IC卡\人脸AI识别梯控系统功能设计需基于模块化架构,整合物联网、生物识别、权限控制等技术,以下是多奥分层次的系统设计框架

一、系统架构设计硬件层主控模块&#xff1a;32位ARM嵌入式处理器&#xff0c;支持CAN/RS485/TCP/IP协议识别终端&#xff1a;支持IC卡(CPU/国密/HID)、二维码扫码器(动态码)、人脸识别(活体检测)电梯控制单元&#xff1a;继电器矩阵控制板&#xff0c;支持20层以上电梯按钮控制…

Kubernetes配置与密钥管理深度指南:ConfigMap与Secret企业级实践

目录 专栏介绍 作者与平台 您将学到什么&#xff1f; 学习特色 Kubernetes配置与密钥管理深度指南&#xff1a;ConfigMap与Secret企业级实践 一、 配置管理&#xff1a;云原生应用的基石 1.1 配置管理的演进与挑战 1.2 ConfigMap与Secret的设计哲学 二、 ConfigMap深度…

知行社黄剑杰:金融跨界,重塑震区救援新章

曾在纽约证券交易所敲响上市钟声的黄剑杰&#xff0c;这位知行社的灵魂人物&#xff0c;此次在西藏震区开启了一场震撼人心的“跨界救援”之旅。他带着在华尔街积累的深厚金融智慧&#xff0c;毅然投身到这场与时间赛跑、与灾难较量的战斗中&#xff0c;为传统救灾模式带来了颠…

API模型与接口弃用指南:历史、替代方案及开发者应对策略

API模型及接口弃用&#xff08;Deprecation&#xff09;全解 概览 在AI与API领域&#xff0c;模型的持续迭代与技术进步推动着平台不断优化服务。与此同时&#xff0c;随着更安全、更强大的新模型推出&#xff0c;旧模型与接口的弃用&#xff08;Deprecation&#xff09;成为…

python3GUI--Joy音乐播放器 在线播放器 播放器 By:PyQt5(附下载地址)

文章目录一&#xff0e;前言二&#xff0e;项目简介三&#xff0e;详细模块介绍1.主界面2.歌单广场3.歌单详情页4.歌手筛选5.歌手详情页6.专辑详情页7.歌曲榜单页8.搜索结果页9.其他1.托盘菜单2.设置四&#xff0e;核心问题回答1.软件UI效果实现2.为什么我做不出来这么漂亮的界…

Spring Boot整合Feign实现RPC调用,并通过Hystrix实现服务降级

feign/openfeign和dubbo是常用的微服务RPC框架&#xff0c;由于feigin内部已经集成ribbon&#xff0c;自带了负载均衡的功能&#xff0c;当有多个同名的服务注册到注册中心时&#xff0c;会根据ribbon默认的负载均衡算法将请求分配到不同的服务。这篇文章就简单介绍一下怎么使用…

Java 性能优化实战(三):并发编程的 4 个优化维度

在多核CPU时代&#xff0c;并发编程是提升Java应用性能的关键手段&#xff0c;但不合理的并发设计反而会导致性能下降、死锁等问题。本文将聚焦并发编程的四个核心优化方向&#xff0c;通过真实案例和代码对比&#xff0c;带你掌握既能提升性能又能保证线程安全的实战技巧。 一…

【秋招笔试】2025.08.19百度秋招机考第一套

📌 点击直达笔试专栏 👉《大厂笔试突围》 💻 春秋招笔试突围在线OJ 👉 笔试突围在线刷题 bishipass.com 题目一:花园路径优化问题 1️⃣:使用栈维护必须保留的观景点,基于三角不等式判断 2️⃣:贪心策略,检查中间点是否为"转折点" 3️⃣:时间复杂度 …