前言

在此介绍一下node的c++扩展在vscode 上的编译环境,在此不多说,比较完善,看了肯定明白。

正文

c++ 环境搭建

下载mingw,然后配置好环境。下载地址为,官网,可以自己百度一下。

配置环境很简单,就是把/bin 放在环境变量中。

那么就看vscode 配置c++ 环境呢?

装好c++插件:

在.vscode 文件下,创建c_cpp_properties.json

如下:

{
"configurations": [
{
"name": "windows",
"includePath": [
"${workspaceFolder}/**"
],
"defines": [],
"compilerPath": "D:\\mingw64\\bin\\g++.exe",
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "gcc-x64"
}
],
"version": 4
}

compilerPath 就是你的mingw64配置位置;

接下来你就可以去编写你的c++代码了。写上,#incluent ,如果没有错误表示成功。

那么接下来就是配置node 扩展环境,好吧,那就开始吧。

node 环境

https://github.com/nodejs/node/tags 下载你的node版本的源码包,我的是14.15.5。

接下来就是解压,这个不用多说。

解压后内部就是这样子了。

那么我们接下来就是配置环境。

首先我们要知道node 是基于v8的,而我们的扩展其实也是基于v8的,所以要配置一下v8。

那么v8在哪里呢?看上面目录中有一个deps,这个是node 的依赖,里面就有v8了。

接来下配置就是这样子的了:

{
"configurations": [
{
"name": "windows",
"includePath": [
"${workspaceFolder}/**",
"D:\\node-14.15.5\\deps\\v8\\include\\",
"D:\\node-14.15.5\\src\\"
],
"defines": [],
"compilerPath": "D:\\mingw64\\bin\\g++.exe",
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "gcc-x64"
}
],
"version": 4
}

includePath 里面增加了v8和node 配置哈,本来node 里面include就可以,但是我们可以看到源码还是很开心的,方便后面调试。

然后你在文件中写入:#include <node.h>,发现没有错误,那么恭喜你成功。

写代码是没得问题了,但是我们还得安装一下编译环境吧,对吧。

npm install -g node-gyp

接下来在hello.cc 中,复制一下官网给的例子:

// hello.cc
#include <node.h> namespace demo { using v8::FunctionCallbackInfo;
using v8::Isolate;
using v8::Local;
using v8::Object;
using v8::String;
using v8::Value; void Method(const FunctionCallbackInfo<Value>& args) {
Isolate* isolate = args.GetIsolate();
args.GetReturnValue().Set(String::NewFromUtf8(
isolate, "world").ToLocalChecked());
} void Initialize(Local<Object> exports) {
NODE_SET_METHOD(exports, "hello", Method);
} NODE_MODULE(NODE_GYP_MODULE_NAME, Initialize) } // 命名空间示例

现在代码和环境好了,那么还得有gyp环境的配置,我们比如告诉它如何编译,从哪个开始。

在根目录下创建,binding.gyp,写入下面的:

{
"targets": [
{
"target_name": "addon",
"sources": [ "hello.cc" ]
}
]
}

然后我们写入npm init,进行初始化,初始化如下:

{
"name": "test",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"install": "node-gyp rebuild"
},
"author": "",
"license": "ISC",
"gypfile": true
}

发现script下有一个install,那么来编译一下,node-gyp rebuild。

然后我们就发现构建完了。

那么如何调用呢?官网给出例子:

// hello.js
const addon = require('./build/Release/addon'); console.log(addon.hello());

这个可以自己试一下。

我的实验如上,返回word。好的,那么我们的code是成功的,但是我希望的是能够调试。

node c++ 插件调试

这个还是比较简单的,下载插件:lldb。

package.json 中script 加入:

"build:dev": "node-gyp build --debug"

在task.json中加入:

 {
"type": "npm",
"script": "build:dev",
"group": {
"kind": "build",
"isDefault": true
},
"problemMatcher": [],
"label": "npm: build:dev",
"detail": "node-gyp build --debug"
}

然后配置文件中调试配置:

{
"name": "Launch Program",
"request": "launch",
"type": "lldb",
"preLaunchTask": "npm: build:dev",
"program": "node",
"args": [
"${workspaceFolder}/test.js"
]
}

解释一下,其实就是preLaunchTask 出发前面那个任务,那个任务就是去编译一下,然后debug类型换成lldb,即可。

效果如下:

后续更新c++基础,写一些c++ node插件c++基础就好,因为一般都是调用库,而不是去从头写,那是只有职业c++干的事,当然如果我们热爱c++,那么可能会变成职业的。

vscode 编写node的c++ 扩展的更多相关文章

  1. 编写Node.js原生扩展

    Node.js是一个强大的平台,理想状态下一切都都可以用javascript写成.然而,你可能还会用到许多遗留的库和系统,这样的话使用c++编写Node.JS扩展会是一个不错的注意. 以下所有例子的源 ...

  2. vscode编写插件详细过程

    前言 之前编写了一个vscode插件用vscode写博客和发布,然后有园友要求写一篇来介绍如何开发一个vscode扩展插件,或者说介绍开发这个插件的过程.然而文章还没有写,园子里面已经有人发布一个文章 ...

  3. vscode编写插件

    vscode编写插件详细过程 前言 之前编写了一个vscode插件用vscode写博客和发布,然后有园友要求写一篇来介绍如何开发一个vscode扩展插件,或者说介绍开发这个插件的过程.然而文章还没有写 ...

  4. 使用VsCode编写和调试.NET Core项目

    ​ 本来我还想介绍以下VSCode或者donet core,但是发现都是废话,没有必要,大家如果对这个不了解可以直接google这两个关键字,或者也根本不会看我这边文章. ​ 好直接进入主题了,本文的 ...

  5. VsCode编写和调试.NET Core

    本文转自:https://www.cnblogs.com/Leo_wl/p/6732242.html 阅读目录 使用VsCode编写和调试.NET Core项目 回到目录 使用VsCode编写和调试. ...

  6. vscode 编写python如何禁止 flake8 提示 line too long

    使用vscode编写python还是挺舒服的,但是如果给vscode安装了语法校验插件,例如flake8,会常常提示一些非常苛刻的语法问题,其中最让人不能忍受的就是line to long. 一行仅能 ...

  7. vscode 调试node.js

    在开发的过程中,几乎不可能一次性就能写出毫无破绽的程序,断点调试代码是一个普遍的需求. 作为前端开发工程师,以往我们开发的JavaScript程序都运行在浏览器端,利用Chrome提供的开发者工具就可 ...

  8. VSCode编写C/C++项目

    VSCode编写C/C++项目 1. 下载插件C/C++.C++ Intellisense;2. 新建一个空文件夹,从VSCode打开. (或File-->Open Folder-->新建 ...

  9. 编写 Node.js Rest API 的 10 个最佳实践

    Node.js 除了用来编写 WEB 应用之外,还可以用来编写 API 服务,我们在本文中会介绍编写 Node.js Rest API 的最佳实践,包括如何命名路由.进行认证和测试等话题,内容摘要如下 ...

  10. 搞定vscode编写java(手把手篇)

    1: 下载VSCODE 本来我写过一个 vscode 编写java 帖子,但是 还是很多人私信我,下面写一个手把手教程 原文地址: https://www.cnblogs.com/dgwblog/p/ ...

随机推荐

  1. 5、zookeeper应用场景-配置中心原理

    配置中心 使用 zookeeper的特性watcher监听器 工作中有这样的一个场景:数据库用户名和密码信息放在一个配置文件中,应用读取该配置文件,配置文件信息放入缓存 若数据库的用户名和密码改变时候 ...

  2. .NET Conf China 2023济南站社区活动

     2024年3月3日,在这个春暖花开的日子里,由微软MVP项目.山东财经大学管理科学与工程学院.胶东开发者社区.济南.NET俱乐部联合举办了[.NET Conf China 2023 JiNan Wa ...

  3. Django 初步使用

    Django 框架系列 目录 Django 框架系列 一. 安装启用 1.1 主流web框架概述 1.2 安装版本 1.3 启动的两种方式 1)命令行创建 2)pycharm创建 3)两种方式的区别 ...

  4. 案例7:将"picK"译成密码

    密码规则:用当前字母后面的第五各字符来代替当前字符.比如字符'a'后面的第5个字符为'f', 则使用'f'代替'a'.编写程序,实现该功能. 示例代码如下: #define _CRT_SECURE_N ...

  5. 使用Mockito与Squaretest进行单元测试.

    项目开发过程中,不少公司都要求写单元测试的代码,可以提高代码的质量,并且可以减少出现BUG的概率. 对于中小型公司来说,对单元测试不做硬性要求,不写最好.因为还是需要一定的工作量,在保证代码质量和性能 ...

  6. MySql注入—DNS注入

    MySql注入-DNS注入 1.DNS注入原理 一.DNS注入原理 DNS注入,是通过查询相应DNS解析产生的记录日志来获取想要的数据 对于sql盲注这样的方法常常用到二分法,非常麻烦而且没有回显,要 ...

  7. 【Atcoder F - Cumulative Cumulative Cumulative Sum】线段树

    要特别注意下精度,long,int范围.WA了几次 import java.util.Scanner; class Main { // static long[] A2 ;//i^2*AI // st ...

  8. 实时云渲染:流式传输 VR 和 AR 内容

    想象一下无需专用的物理计算机,甚至无需实物连接,就能获得高质量的 AR/VR 体验是种什么样的体验? 过去,与 VR 交互需要专用的高端工作站,并且根据头显.壁挂式传感器和专用的物理空间.VR 中的复 ...

  9. FBEC大会 | 瑞云科技 CTO 赵志杰:元宇宙时代的基础设施——实时云渲染

    FBEC未来商业生态链接大会于2023年2月24日在深圳福田大中华喜来登酒店盛大召开,本次大会由广东省游戏产业协会.深圳市互联网文化市场协会指导,陀螺科技主办. 大会以"勇毅前行·逐光而上& ...

  10. python高级技术(IO模型)

    一 IO模型介绍 Linux环境下的network IO * blocking IO           阻塞IO    * nonblocking IO      非阻塞IO    * IO mul ...