Skip to content

SMake LLVM 使用方法

Yu Chen edited this page Jun 23, 2021 · 3 revisions

准备工作

  • 在项目目录下创建 package.json 文件。
  • 安装项目依赖 npm i -D smake
  • 在项目目录下创建 smake.js 文件。

编译 Linux 可执行文件

编辑 smake.js

const { LLVM_Linux } = require('smake');

class linux_executable extends LLVM_Linux {
  target = 'aarch64-linux-gnu';
  files = ['src/main.c'];
}

module.exports = {
  targets: [
    linux_executable,
  ],
};
  • target: x86_64-linux-gnu(默认), arm-linux-gnueabihf, aarch64-linux-gnu
  • files: 需要编译的文件

编译 Windows 可执行文件

编辑 smake.js

const { LLVM_Win32 } = require('smake');

class win32_executable extends LLVM_Win32 {
  ARCH = 'x86_64';
  files = ['src/main.c'];
}

module.exports = {
  targets: [
    win32_executable,
  ],
};
  • ARCH: x86_64(默认), i386
  • files: 需要编译的文件

编译 macOS 可执行文件

编辑 smake.js

const { LLVM_Darwin } = require('smake');

class darwin_executable extends LLVM_Darwin {
  ARCH = 'arm64';
  files = ['src/main.c'];
}

module.exports = {
  targets: [
    darwin_executable,
  ],
};
  • ARCH: x86_64(默认), arm64
  • files: 需要编译的文件

编译库

编辑 smake.js

class linux_static extends LLVM_Linux {
  type = 'static';
  files = ['src/lib.c'];
}
  • type: binary(可执行文件,默认),static(静态库),shared(动态库)

编译 Nodejs 插件

class win32_x64 extends NODE_ADDON_Win32 {
  includedirs = [
    ...super.includedirs,
    './node_modules/nan',
    './node_modules/node-addon-api',
  ];

  files = ['src/addon.cc'];
}
  • Windows 使用 NODE_ADDON_Win32,Linux 使用 NODE_ADDON_Linux,macOS 使用 NODE_ADDON_Darwin。
  • includedirs:头文件目录,需要添加需要的头文件。