这是一份详细的 cmake.js 编译指南,教你如何在 Windows 上编译 js 代码。包含环境搭建、编译配置、使用说明等完整操作流程。
前言 🚀
因要给鸿蒙手机提供打包好的 C++ 库,鸿蒙系统的应用层是 js 写的,底层是 C++ 写的,故为提高鸿蒙开发效率,需要将其他端的 C++ 库通过 napi 打包成能 node.js 下运行的动态库。
但是平时多用 Windows 开发,所以要在 Windows 本地调试 js 代码,查看接口是否正常,如果正常就可以通过鸿蒙工具链打包成 arm64 的动态库了。
环境说明 💻
而 Windows 是 x86 架构,即要将所有 C++ 库依赖的三方库都编译成 native,即 dll 或者 lib,再通过 cmake.js 提供的编译工具,打包成 .node 库就可以本地调试了。
⚠️ 注意:鸿蒙库是 arm64 的 so 库,不可以在非 arm64 架构上调试和运行,此处指 Windows 之类的 x86 架构。譬如你想在 Mac 上调试 js 代码,那就要使用 Mac 提供的工具链对所有的三方库 native 化(重新编译),才可以调试和运行。
开发准备 📝
cmake.js 官方文档:cmake-js
开发需要准备:
- C++ 源码 📄
- CMakeLists.txt 📄
这两个缺一不可,其中 C++ 源码中需要包含写好的 napi 代码,即通过 napi 函数打包 C++ 代码。
napi 相关文档可以参考:Node.js v20.17.0 文档
环境搭建 🛠️
安装 Node.js 📦
- 打开命令行窗口(bash 或者 powershell)
- 下载安装好 node.js 就可以使用 npm 命令了
安装 cmake-js ⚙️
npm install cmake-js
- 配置环境 🔧 在 CMakeLists.txt 同级目录下配置(这步很重要,不配置的话就找不到 napi 函数的符号文件):
cmake-js configure
- 指定 Visual Studio 版本 🎯 Windows 编译库默认使用 msvc,需要指定 Visual Studio 版本:
npm config set cmake_js_G "Visual Studio 16"
- Visual Studio 16 对应 vs2019
- Visual Studio 17 对应 vs2022
编译说明 🔨
- cmake-js 默认是 x64 编译,如果需要编译成 x86,可以使用:
npm config set cmake_js_arch ia32
cmake-js compile cmake -G "Visual Studio 16 2019" -A Win32
⚠️ 注意:第二行命令容易在访问 ia32 cmake.js 资源时出现失败的问题,暂时没有找到解决方法(可能先在本地下载好 ia32 的资源就能解决)。
- 使用 x64 时,CMakeLists.txt 需要指定平台:
if(WIN32 OR CMAKE_SYSTEM_NAME STREQUAL "Windows")
if(CMAKE_GENERATOR MATCHES "Visual Studio")
set(CMAKE_GENERATOR_PLATFORM x64)
set(CMAKE_GENERATOR_TOOLSET "host=x64" CACHE STRING "Platform Toolset" FORCE)
else()
set(CMAKE_C_COMPILER clang-cl)
set(CMAKE_CXX_COMPILER clang-cl)
endif()
endif()
- 编译命令 ⚡
cmake-js compile
使用生成的库 📚
编译完成后会生成 .node 文件,在 js 代码中使用:
const { Lib } = require('./build/Release/xxx.node');
// ... 其他代码
测试运行:
node test.js
常用配置命令 ⚙️
# 关闭 SSL 验证
npm set strict-ssl false
# 设置编译架构
npm config set cmake_js_arch x64
# 设置代理
set HTTP_PROXY=[IP]:[PROT]
set HTTPS_PROXY=[IP]:[PROT]
# 清除代理
npm config set proxy null
其他说明 📌
有些文章推荐使用 ffi 和 ref 去加载库文件调试,但实际安装会遇到很多问题,特别是安装 windows-build-tools 时:
npm install --global windows-build-tools
❌ 常见错误:
npm ERR! command C:\Windows\system32\cmd.exe /d /s /c node ./dist/index.js
Downloading python-2.7.15.amd64.msi
npm ERR! Error: GET https://npm.taobao.org/mirrors/python/2.7.15/python-2.7.15.amd64.msi returned 404
由于解决这些问题比较耗时,建议使用本文介绍的 cmake.js 方案。