快速开始
从源码构建 Emjs,安装产物,并在 C++ 应用中嵌入引擎。
环境要求
- 支持 C++17 的编译器(GCC、Clang、MSVC)
- CMake 3.14 及以上
- 核心引擎无第三方运行时依赖
构建
git clone https://github.com/steezer/emjs.git
cd emjs
mkdir -p build && cd build
cmake ..
cmake --build .
CMake 生成的目标:
| 目标 | 说明 |
|---|---|
emjs | 命令行可执行文件 |
emjs-core | 核心解释器静态库 |
emjs-exts | 扩展模块静态库 |
test_js | 脚本测试运行器 |
安装
cmake --install build --prefix /usr/local
典型安装路径:
/usr/local/bin/emjs/usr/local/lib/libemjs-core.a/usr/local/lib/libemjs-exts.a/usr/local/include/emjs/*.h
最小嵌入示例
#include "engine.h"
#include <cstdio>
using namespace Emjs;
int main() {
char mem[4096] = {0};
JsEngine* js = JsEngine::create(mem, sizeof(mem));
if (!js) return 1;
JsValue r = js->eval("let x=3; let y=4; x*y + 1;");
std::printf("%s\n", js->str(r)); // 输出 13
JsEngine::destroy(js);
return 0;
}
在项目中链接
c++ -std=c++17 app.cpp -I/path/to/emjs/include/emjs \
-L/path/to/emjs/lib -lemjs-core -lemjs-exts
项目结构
src/
core.h / core.cpp # 词法、语法、解释器、GC
engine.h / engine.cpp # 对外 C++ API
internal.h / internal.cpp
extension/ # 可选模块(console、math、json...)
app.cpp # CLI 源码
tests/script/ # JavaScript 示例脚本
编译选项
| 选项 | 默认 | 说明 |
|---|---|---|
EMJS_OPTIMIZE_SIZE | ON | 启用 -Oz 等体积优化 |
EMJS_ENGINE_DUMP | OFF | 启用 dump() 调试输出 |
BUILD_CONSOLE 等 | ON | 控制各扩展模块是否编译 |