138 lines
2.5 KiB
Markdown
138 lines
2.5 KiB
Markdown
# yps-quickjs
|
||
|
||
QuickJS JavaScript 引擎的跨平台静态/动态库封装,用于集成到 GUI 项目中。
|
||
|
||
## 概述
|
||
|
||
ypqjs 是基于 QuickJS-ng 的轻量级 JavaScript 引擎库,支持 Windows 和 Linux 平台。
|
||
|
||
## 特性
|
||
|
||
- 跨平台支持(Windows/Linux)
|
||
- 可编译为静态库或动态库
|
||
- 包含标准 C 库扩展(可选)
|
||
- C11 标准
|
||
- 完整的 ECMAScript 支持
|
||
|
||
## 构建
|
||
|
||
### 前置要求
|
||
|
||
- CMake 3.10 或更高版本
|
||
- C 编译器(支持 C11):GCC、Clang、MSVC 等
|
||
|
||
### Windows 构建
|
||
|
||
```cmd
|
||
cd yps-quickjs
|
||
mkdir build
|
||
cd build
|
||
cmake .. -DCMAKE_BUILD_TYPE=Release
|
||
cmake --build . --config Release
|
||
```
|
||
|
||
### Linux 构建
|
||
|
||
```bash
|
||
cd yps-quickjs
|
||
mkdir build
|
||
cd build
|
||
cmake .. -DCMAKE_BUILD_TYPE=Release
|
||
cmake --build .
|
||
```
|
||
|
||
### 构建选项
|
||
|
||
- `YPQJS_BUILD_SHARED_LIBS=ON` - 构建动态库(默认:静态库)
|
||
- `YPQJS_ENABLE_LIBC=ON` - 启用标准 C 库扩展(默认:启用)
|
||
|
||
示例:
|
||
|
||
```cmake
|
||
cmake .. -DYPQJS_BUILD_SHARED_LIBS=ON -DYPQJS_ENABLE_LIBC=ON
|
||
```
|
||
|
||
### Debug 构建
|
||
|
||
```cmake
|
||
cmake .. -DCMAKE_BUILD_TYPE=Debug
|
||
```
|
||
|
||
## 集成到你的项目
|
||
|
||
### 使用 CMake
|
||
|
||
在你的项目的 CMakeLists.txt 中添加:
|
||
|
||
```cmake
|
||
# 查找 yps-quickjs
|
||
find_package(ypqjs REQUIRED)
|
||
|
||
# 链接到你的目标
|
||
target_link_libraries(your_target PRIVATE ypqjs)
|
||
|
||
# 如果需要标准 C 库扩展
|
||
target_compile_definitions(your_target PRIVATE YPQJS_ENABLE_LIBC)
|
||
```
|
||
|
||
### 使用静态库
|
||
|
||
```cmake
|
||
# 直接包含源码
|
||
add_subdirectory(path/to/yps-quickjs)
|
||
|
||
# 链接
|
||
target_link_libraries(your_target PRIVATE ypqjs)
|
||
```
|
||
|
||
### 使用动态库
|
||
|
||
安装后:
|
||
|
||
```cmake
|
||
find_package(ypqjs REQUIRED)
|
||
target_link_libraries(your_target PRIVATE ypqjs)
|
||
```
|
||
|
||
## API 使用示例
|
||
|
||
```c
|
||
#include "quickjs.h"
|
||
#include "quickjs-libc.h"
|
||
|
||
int main() {
|
||
// 创建运行时
|
||
JSRuntime *rt = JS_NewRuntime();
|
||
|
||
// 创建上下文
|
||
JSContext *ctx = JS_NewContext(rt);
|
||
|
||
// 初始化标准模块
|
||
js_init_module_std(ctx, "std");
|
||
js_init_module_os(ctx, "os");
|
||
|
||
// 执行 JavaScript 代码
|
||
const char *code = "console.log('Hello from yps-quickjs!');";
|
||
JSValue result = JS_Eval(ctx, code, strlen(code), "<eval>", JS_EVAL_TYPE_GLOBAL);
|
||
|
||
// 清理
|
||
JS_FreeValue(ctx, result);
|
||
JS_FreeContext(ctx);
|
||
JS_FreeRuntime(rt);
|
||
|
||
return 0;
|
||
}
|
||
```
|
||
|
||
## 头文件
|
||
|
||
- `quickjs.h` - 核心 JavaScript 引擎 API
|
||
- `quickjs-libc.h` - 标准 C 库扩展 API(可选)
|
||
|
||
## 许可证
|
||
|
||
MIT License - 详见 LICENSE 文件
|
||
|
||
## 原项目
|
||
|
||
基于 [QuickJS-ng](https://github.com/quickjs-ng/quickjs) 项目开发。 |