cpp集成quickjs
使用 cmake
集成 quickjs
目录结构
CMakeLists.txt
main.cpp
vendor
- quickjs
集成
获取quickjs
git clone https://github.com/quickjs-ng/quickjs.git vendor/quickjs
CMakeLists.txt
如下:
cmake_minimum_required(VERSION 3.10)
project(test)
add_subdirectory(vendor/quickjs)
add_executable(test main.cpp)
target_link_libraries(test qjs)
main.cpp
如下:
#include "quickjs.h"
#include <iostream>
#include <string>
void js_std_dump_error(JSContext *ctx) {
JSValue exception_val = JS_GetException(ctx);
const char *error = JS_ToCString(ctx, exception_val);
if (error) {
std::cerr << "JS Error: " << error << std::endl;
JS_FreeCString(ctx, error);
}
JS_FreeValue(ctx, exception_val);
}
int main() {
JSRuntime *rt = JS_NewRuntime();
JSContext *ctx = JS_NewContext(rt);
const char *script = R"(
function add(a, b) {
return a + b;
}
add(10, 20);
)";
JSValue result = JS_Eval(ctx, script, strlen(script), "<input>", JS_EVAL_TYPE_GLOBAL);
if (JS_IsException(result)) {
js_std_dump_error(ctx);
} else {
int32_t sum;
if (JS_ToInt32(ctx, &sum, result) == 0) {
std::cout << "JS add() result: " << sum << std::endl;
}
}
JS_FreeValue(ctx, result);
JS_FreeContext(ctx);
JS_FreeRuntime(rt);
return 0;
}
测试
mkdir build
cd build
cmake ..
make -j7
./test
输出:
./test
JS add() result: 30
comment:
- Valine
- LiveRe
- ChangYan