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: