[QJS xmake] 非常简单地在Windows下编译QuickJS!

文章目录

前言

quickjs是个很厉害的东西啊,我一直想编译一下的,奈何一直没成功。现在找了点时间成功编译了,写篇文章记录一下。当前版本:2024-1-13 应该没人写过教程,是目前最新的了。

准备

C编译器

QuickJS是用纯C,C89写的,这意味着你需要的C编译器要求很低。最小的tcc,10MB也是可以的,但我不建议(具体原因一会说),建议使用msvc或gcc。我使用的是gcc。

Windows下gcc分为msys2和mingw,msys2相对重量级一点,我没有装,我用的是mingw。当然,如果你装了msys2也可以,不过你也可以参考这篇文章,同时,这篇文章也讲了支持从js加载dll的方法。

xmake

xmake是一个轻量化的,基于lua的C/C++构建环境,使用起来非常方便。官网是<xmake.io>,配置很方便,官方提供了傻瓜式的安装包。它支持msvc、gcc/mingw、clang等编译器,不过不支持tcc,所以如果你只装了tcc,就没法用xmake编译了。

编译包

xmake是用xmake.lua文件控制编译选项的,而这个玩意正好有人帮我们写好了,进入上面这个仓库,你可以选择把整个zip下下来,也可以选择只下载xmake.lua文件,反正我们只需要这个。

QuickJS的源代码在这,找到QuickJS source code: quickjs-XXXX-XX-XX.tar.xz,点击链接下载。

(啊当然,如果你只想玩玩,不是一定要编译的话,再下面有个Binary releases你一定不会看不见吧。。)

工程准备

新建文件夹,把上面下载的quickjs-xmake解压进去。如果你下的是单个xmake.lua文件也行,直接放进去就行了,但要记得新建一个叫quickjs的文件夹。

文件目录如下:

++Project
 |--quickjs
 |  |--空
 |--xmake.lua
 |--repl.c 【请删除这个文件!】

删除repl.c是因为这是旧版本的,不适于现在的版本。

然后把quickjs-XXXX-XX-XX.tar.xz解压进去,注意这是双层压缩包。

此时在此目录里可以用xmake f -p mingw切换mingw/gcc环境(Windows下默认msvc)

修改版本号

这步是可选的,但建议做一下。

quickjs文件夹里面有个VERSION文件,包含版本号(当然压缩包文件名里也有),复制一下,打开xmake.lua,修改第5行,把

lua 复制代码
add_defines("CONFIG_VERSION=\"2020-11-08\"")

改成

lua 复制代码
add_defines("CONFIG_VERSION=\"2024-01-13\"")

注意不要手欠不小心多干掉个\"了。。

第一遍编译

编译需要两遍,第一次是编译"编译器"qjsc.exe,即把js转换成C,甚至是exe的程序,然后用它进行第二次,把repl.js编译成repl.c,再编译出qjs.exe,这是类似python解释器环境的东西,可以用来执行代码。

在Project文件夹打开cmd/powershell窗口,输入xmake,如果出现"无法识别的命令"之类的话别找我,先配置好xmake再说吧。。正常情况应该是这样:
没有关系,只有qjs.exe没有编译出来,qjsc.exe已经有了。

我们进入build/mingw/x86_64/release目录里,看到qjsc.exe存在就可以进入下一步了。

第二遍编译

在quickjs文件夹中找到repl.js,拷到刚才的release目录中,打开进行一些小修改,去掉或用//注释掉第25行的

js 复制代码
"use strip";
就是变成下面这样:
//"use strip";

然后在当前目录执行./qjsc -c repl.js,应该不会报错,然后这个文件夹里应该会多出来一个out.c的文件。

把这个文件拷回Project文件夹,改名为repl.c(就是之前删掉那个文件,还记得么)重新执行xmake
这回就成功了。回到release文件夹,你就可以用qjs.exe来执行JavaScript代码了!

效果

顺带提一下,这玩意只能搞UTF-8编码,而中文Windows的cmd是GBK哦~

(写完才发现,还有人也做过教程,也贴上来吧:this

相关推荐
程序员_三木7 分钟前
Three.js入门-Raycaster鼠标拾取详解与应用
开发语言·javascript·计算机外设·webgl·three.js
唐宋元明清21888 分钟前
Windows 记录开机后应用启动慢的问题
windows·系统异常
FeboReigns44 分钟前
C++简明教程(文章要求学过一点C语言)(1)
c语言·开发语言·c++
FeboReigns1 小时前
C++简明教程(文章要求学过一点C语言)(2)
c语言·开发语言·c++
开心工作室_kaic2 小时前
springboot476基于vue篮球联盟管理系统(论文+源码)_kaic
前端·javascript·vue.js
川石教育2 小时前
Vue前端开发-缓存优化
前端·javascript·vue.js·缓存·前端框架·vue·数据缓存
搏博2 小时前
使用Vue创建前后端分离项目的过程(前端部分)
前端·javascript·vue.js
_小柏_2 小时前
C/C++基础知识复习(43)
c语言·开发语言·c++
yoyobravery2 小时前
c语言大一期末复习
c语言·开发语言·算法
温轻舟2 小时前
前端开发 之 12个鼠标交互特效上【附完整源码】
开发语言·前端·javascript·css·html·交互·温轻舟