cpp集成jerryscript
使用 cmake
集成 jerryscript
jerryscript
轻量级嵌入式 JavaScript 引擎
目录结构
CMakeLists.txt
main.cpp
vendor
- jerryscript
集成
获取 jerryscript
git clone https://github.com/jerryscript-project/jerryscript.git vendor/jerryscript
CMakeLists.txt
如下:
cmake_minimum_required(VERSION 3.14)
project(test VERSION 0.0.1 LANGUAGES CXX)
# 使用 C++17 标准
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# 添加 JerryScript
add_subdirectory(vendor/jerryscript)
# 添加可执行文件
add_executable(test main.cpp)
# 链接 JerryScript 库
target_link_libraries(test PRIVATE jerry-core jerry-port jerry-ext)
main.cpp
如下:
#include "jerryscript.h"
#include <iostream>
int main(void)
{
const jerry_char_t script[] = "var str = 'Hello, World!'; str;";
const jerry_length_t script_size = sizeof(script) - 1;
jerry_init(JERRY_INIT_EMPTY);
// 执行 JS 脚本
jerry_value_t eval_ret = jerry_eval(script, script_size, JERRY_PARSE_NO_OPTS);
if (!jerry_value_is_exception(eval_ret) && jerry_value_is_string(eval_ret)) {
// 获取字符串大小
jerry_size_t size = jerry_length_t(eval_ret);
jerry_char_t buffer[128] = {0}; // 假设字符串不会超出 128 字节
jerry_string_to_buffer(eval_ret, JERRY_ENCODING_UTF8, buffer, size);
buffer[size] = '\0';
std::cout << "JS return: " << buffer << std::endl;
} else {
std::cerr << "JS no return!" << std::endl;
}
jerry_value_free(eval_ret);
jerry_cleanup();
return 0;
}
测试
mkdir build
cd build
cmake ..
make -j7
./test
输出:
JS return: Hello, World!
jerryscript REPL
在 build 目录下还会额外生成 jerry 可执行文件
jerry> var test=0;for(i=0;i<10;++i) test+=i; print(test);
45
undefined
comment:
- Valine
- LiveRe
- ChangYan