Windows下使用CMake编译lua

Lua 是一个功能强大、高效、轻量级、可嵌入的脚本语言。它支持程序编程、面向对象程序设计、函数式编程、数据驱动编程和数据描述。
Lua的官方网站上只提供了源码,需要使用Make进行编译,具体的编译方法为

curl -R -O http://www.lua.org/ftp/lua-5.4.6.tar.gz
tar zxf lua-5.4.6.tar.gz
cd lua-5.4.6
make all test

luaforwindows提供了Windows下的lua环境,不过已经很久没更新了。
在这里插入图片描述
虽然Windows下没有make,但是可以考虑通过cmake来编译lua。

编译准备

需要提前安装下面这些软件,2和3只需要选一个安装来作为编译器。

  1. cmake
  2. visual studio
  3. mingw

开始编译

下载lua的源码,解压至一个文件夹内。
在这里插入图片描述
进入src文件夹内,创建CMakeLists.txt,内容如下

cmake_minimum_required(VERSION 3.0.0)
project(lua VERSION 0.1.0 LANGUAGES C)include_directories("${PROJECT_BINARY_DIR}")aux_source_directory(. C_LIST)			# 将当前路径下的所有源文件放在C_LIST变量中
list(REMOVE_ITEM C_LIST "./lua.c" "./luac.c")	# 从C_LIST中删除"./lua.c"和"./luac.c"file(GLOB_RECURSE luamain RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/lua*.c") 	# 得到当前目录下所有以lua开头的源文件,即lua.c和luac.c
foreach(mainfile IN LISTS luamain)get_filename_component(mainname ${mainfile} NAME_WE)	# 得到文件名lua和luac,add_executable(${mainname} ${mainfile} ${C_LIST})	# mainname为可执行文件的名字,mainfile C_LIST则是生成可执行文件的源文件。
endforeach()include(CTest)
enable_testing()set(CPACK_PROJECT_NAME ${PROJECT_NAME})
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
include(CPack)

由于源码中一共有两个c文件lua.cluac.c存在main函数,所以需要分别编译。get_filename_component(mainname ${mainfile} NAME_WE)的作用是获取不包含目录也不包含最长扩展名的文件名,即mainnamelualuac

  1. 如果已经安装了visual studio,可以直接开始编译(确保在src文件夹中执行下面的命令)
cmake -Bbuild  && cmake --build ./build

最后可以在src\build\Debug文件夹中找到lua.exeluac.exe两个文件。

  1. 如果只安装了mingw,需要在CMakeLists.txt中指定编译器(我的电脑中visual studio和mingw都有,不确定是不是必要的),将下面这两行加到CMakeLists.txt中(需要把路径修改为mingw安装的路径)
set (CMAKE_C_COMPILER "D:/mingw64/bin/gcc")
set (CMAKE_CXX_COMPILER "D:/mingw64/bin/g++")

添加后的CMakeLists.txt

cmake_minimum_required(VERSION 3.0.0)
project(lua VERSION 0.1.0 LANGUAGES C)
# 指定编译器
set (CMAKE_C_COMPILER "D:/mingw64/bin/gcc")
set (CMAKE_CXX_COMPILER "D:/mingw64/bin/g++")include_directories("${PROJECT_BINARY_DIR}")aux_source_directory(. C_LIST)
list(REMOVE_ITEM C_LIST "./lua.c" "./luac.c")file(GLOB_RECURSE luamain RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/lua*.c")
foreach(mainfile IN LISTS luamain)# Get file name without directoryget_filename_component(mainname ${mainfile} NAME_WE)add_executable(${mainname} ${mainfile} ${C_LIST})
endforeach()include(CTest)
enable_testing()set(CPACK_PROJECT_NAME ${PROJECT_NAME})
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
include(CPack)

同时在执行时指明参数-G "MinGW Makefiles"

cmake -Bbuild -G "MinGW Makefiles" && cmake --build ./build

最后可以在src\build文件夹中找到lua.exeluac.exe这两个文件

测试lua

命令行

D:\compile\temp\lua-5.4.6\src\build>lua
Lua 5.4.6  Copyright (C) 1994-2023 Lua.org, PUC-Rio
> print("hello world")
hello world
> os.exit()

脚本
编写一个lua文件test.lua

-- test.lua 文件脚本
a = 5               -- 全局变量
local b = 5         -- 局部变量
function joke()c = 5           -- 全局变量local d = 6     -- 局部变量
end
joke()
print(c,d)          --> 5 nil
dolocal a = 6     -- 局部变量b = 6           -- 对局部变量重新赋值print(a,b);     --> 6 6
end
print(a,b)      --> 5 6
D:\compile\temp\lua-5.4.6\src\build>lua test.lua
5       nil
6       6
5       6

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/221886.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中兴 H108NS 路由器 tools_admin.asp权限绕过漏洞复现

0x01 产品简介 中兴H108NS路由器是一款集WiFi管理、路由分配、动态获取上网连接等功能于一体的路由器产品。 0x02 漏洞概述 中兴H108NS路由器tools_admin.asp接口处存在身份认证绕过漏洞,攻击者可利用该漏洞绕过身份认证允许访问路由器的管理面板修改管理员密码,获取用户的…

虾皮选品网:如何使用虾皮选品数据软件提升您的选品策略

在虾皮(Shopee)平台上进行选品时,了解市场趋势、竞争程度和产品潜力是非常重要的。为了帮助卖家更好地分析虾皮市场,并为选品和运营策略提供有力支持,有一些数据软件和工具可以派上用场。本文将介绍一些建议使用的虾皮…

HPM5300系列--第二篇 Visual Studio Code开发环境以及多种调试器调试模式

一、目的 在博文《HPM5300系列--第一篇 命令行开发调试环境搭建》、《HPM6750系列--第四篇 搭建Visual Studio Code开发调试环境》中我们介绍了命令行方式开发环境,也介绍了HPM6750evkmini开发板如何使用Visual Studio Code进行开发调试(其中调试方式使用…

Power BI - 5分钟学习增加条件列

每天5分钟,今天介绍Power BI增加条件列。 什么是增加条件列? 简单理解,可以根据表中某列设置一个或者多个条件,判定的结果会生成一个新列。 举例: 首先,导入一张【Sales】样例表(Excel数据源导入请参考每…

深入理解C语言的函数参数

1、一个简单的函数 int Add(int x, int y) {return x y; }int main() {printf("%d", Add(2, 3, 4, 5, 6));return 0; } 这一段足够简单的代码,闭眼都能知道运行结果会在屏幕上打印 5 。那编译器是怎么处理后面的 4、5、6 ? 我们再看看这个函…

前端已死?别低估前端,他是互联网世界的核心!【这是一篇治愈系文章】

文章目录 💥 AI回答🦋 现状🦉 焦虑🐉 力量🦅 观点🐣 粗浅分析🦥 快乐的韭菜🏆 总结 💥 AI回答 前端已死? ai的答案是这样: 前端并没有死掉,它仍然…

【小沐学Python】Python实现语音识别(SpeechRecognition)

文章目录 1、简介2、安装和测试2.1 安装python2.2 安装SpeechRecognition2.3 安装pyaudio2.4 安装pocketsphinx(offline)2.5 安装Vosk (offline)2.6 安装Whisper(offline) 3 测试3.1 命令3.2 fastapi3.3 go…

WTF ‘Questions‘

WTF ‘Tech Team Lead’ As a Tech Team Lead, your role is to oversee the technical aspects of a project or team, and to provide guidance, support, and leadership to your team members. Here are some key responsibilities and aspects of the role: Leadership …

vue 中国省市区级联数据 三级联动

vue 中国省市区级联数据 三级联动 安装插件 npm install element-china-area-data5.0.2 -S 当前版本以测试,可用。组件中使用了 element-ui, https://element.eleme.cn/#/zh-CN/component/installation 库 请注意安装。插件文档 https://www.npmjs.com/package/ele…

Alibaba分布式事务组件Seata AT实战

1. 分布式事务简介 1.1 本地事务 大多数场景下,我们的应用都只需要操作单一的数据库,这种情况下的事务称之为本地事务(Local Transaction)。本地事务的ACID特性是数据库直接提供支持。本地事务应用架构如下所示: 在JDBC编程中,我…

使用SPSS的McNemar检验两种深度学习模型的差异性

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 使用SPSS的McNemar检验两种深度学习模型的差异性 前言简述:一、McNemar检验1.1来源1.2 两配对样本的McNemar(麦克尼马尔)变化显著性检验1.3 适用范围:…

卷积神经网络(含案例代码)

概述 卷积神经网络(Convolutional Neural Network,CNN)是一类专门用于处理具有网格结构数据的神经网络。它主要被设计用来识别和提取图像中的特征,但在许多其他领域也取得了成功,例如自然语言处理中的文本分类任务。 C…

Nginx快速入门

nginx准备 文本概述参考笔记 狂神:https://www.kuangstudy.com/bbs/1353634800149213186 前端vue打包 参考:https://blog.csdn.net/weixin_44813417/article/details/121329335 打包命令: npm run build:prod nginx 下载 网址&#x…

Java集合--Map

1、Map集合概述 在Java的集合框架中&#xff0c;Map为双列集合&#xff0c;在Map中的元素是成对以<K,V>键值对的形式存在的&#xff0c;通过键可以找对所对应的值。Map接口有许多的实现类&#xff0c;各自都具有不同的性能和用途。常用的Map接口实现类有HashMap、Hashtab…

uniapp+vue3使用canvas保存海报的使用示例,各种奇奇怪怪的问题解决办法

我们这里这里有一个需求&#xff0c;是将当前页面保存为海报分享给朋友或者保存到本地相册&#xff0c;因为是在小程序端开发的&#xff0c;所以不能使用html2canvas这个库&#xff0c;而且微信官方新推出Snapshot.takeSnapshot这个api还不是很完善&#xff0c;如果你是纯小程序…

【问题处理】—— lombok 的 @Data 大小写区分不敏感

问题描述 今天在项目本地编译的时候&#xff0c;发现有个很奇怪的问题&#xff0c;一直提示某位置找不到符号&#xff0c; 但是实际在Idea中显示确实正常的&#xff0c;一开始以为又是IDEA的故障&#xff0c;所以重启了IDEA&#xff0c;并执行了mvn clean然后重新编译。但是问…

ASF-YOLO开源 | SSFF融合+TPE编码+CPAM注意力,精度提升!

目录 摘要 1 Introduction 2 Related work 2.1 Cell instance segmentation 2.2 Improved YOLO for instance segmentation 3 The proposed ASF-YOLO model 3.1 Overall architecture 3.2 Scale sequence feature fusion module 3.3 Triple feature encoding module …

【Python网络爬虫入门教程3】成为“Spider Man”的第三课:从requests到scrapy、爬取目标网站

Python 网络爬虫入门&#xff1a;Spider man的第三课 写在最前面从requests到scrapy利用scrapy爬取目标网站更多内容 结语 写在最前面 有位粉丝希望学习网络爬虫的实战技巧&#xff0c;想尝试搭建自己的爬虫环境&#xff0c;从网上抓取数据。 前面有写一篇博客分享&#xff0…

【实用技巧】从文件夹内批量筛选指定文件并将其复制到目标文件夹

原创文章&#xff0c;转载请注明出处&#xff01; 从文件夹中批量提取指定文件。 使用DOS命令&#xff0c;根据TXT文件中列出指定文件名&#xff0c;批量实现查找指定文件夹里的文件并复制到新的文件夹。 文中给出使用DOS命令和建立批处理文件两种方法。 文件准备 工作文件…

vite(一)——基本了解和依赖预构建

文章目录 一、什么是构建工具&#xff1f;1.为什么使用构建工具&#xff1f;2.构建工具的作用&#xff1f;3.构建工具怎么用&#xff1f; 二、经典面试题&#xff1a;webpack和vite的区别1.编译方式不同2.基础概念不同3.开发效率不同4.扩展性不同5.应用场景不同6.总结&#xff…