前言
对于lua
的构建 官方默认使用make
工具, 常见的构建工具有:
Make
:又指GNU Make
, 是Linux
系统下的通用构建工具, 延伸的构建工具还有nmake
,dmake
,cmake
,xmake
等等Scons
: 以python
语言编写的一款跨平台构建工具 对标make
容易学习快速上手Ant
: 基于java
的构建工具, 被认为是make
工具的替代品, 早期eclipse
采用的构建工具就是它maven
: 同样是基于java
, 它不单单是构建工具 还是项目管理工具, 属于Ant
进化版, 目前Idea
平台中java
的构建基本用的就是它Gradle:
基于Groovy
的构建工具, 被认为是Ant和Maven的替代品, 目前Android
编译使用的构建工具就是它
什么是构建工具
以java
程序为例, 我们在写好代码后, 需要使用javac
指令对源码进行编译, 然后使用java
指令执行
这个过程叫做编译, 如果一两个文件还好, 代码文件一多, 手动敲指令进行编译是会死人的🤪, 于是乎自动化的构建工具出现了, 目的就是为了取代人工编译
构建工具的发展
早期的make
–>java
的ant
–>后来的maven
–>现在的gradle
每一代构建工具的诞生, 都是为了解决上一代工具存在的痛点
Gradle
, 用过的都说好!!😆
对Lua源码进行构建编译
我这边直接使用Android Studio
, 具体步骤如下:
首先 去
lua
官网下载源码, 这里我使用的是5.4
的源码然后 在Studio中新建一个空工程, 然后将
lua
源码拖进src
目录中紧接着 对
build.gradle
文件进行配置lua
一共包含两个可执行文件, 一个是lua
另一个是luac
, 所以这两个执行文件我们需要分开构建, 具体的gradle
配置如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41apply plugin: 'c' //使用c构建模式
model {
components {
//创建一个lua执行文件构建入口
lua(NativeExecutableSpec) {
sources {
c {//指定源码位置以及需要包含和排除的问价
source {
srcDir "src/main/c/lua"
include '*.c'
exclude 'luac.c'
}
exportedHeaders {
include 'lauxlib.h', 'lua.h', 'lua.hpp', 'luaconf.h', 'lualib.h'
}
}
}
}
//创建一个luac执行文件构建入口
luac(NativeExecutableSpec) {
sources {
c {
source {
srcDir "src/main/c/lua"
include '*.c'
exclude 'lua.c'
}
exportedHeaders {
include 'lauxlib.h', 'lua.h', 'lua.hpp', 'luaconf.h', 'lualib.h'
}
}
}
}
}
}最后 开始编译
gradle
刷新同步后, 我们在右侧gradle
任务面板可以看到多出lua
和luac
相关的task
, 此时我们执行build
任务开始对lua
源码进行编译:编译完成后, 我们可以在
build
文件中查看到生成的可执行文件:双击可正常运行:
至此 我们的
lua
编译完毕
附加
如果你只想编译
lu
a而不编译luac
, 那么可以单独运行luaExecutable
:
在
gradle
配置文件中的组件的名称可以自定义
关于编译工具
编译工具和构建工具是两个不同的东西:
C/C++/Object-C
语言常用的编译工具有:GCC
,Clang
Java
语言的编译工具为Javac
, 当然GCC
也能编译java
语言Android
的编译工具为aapt
,so
库的编译早期采用的是GCC
, 现在是Clang
上面对于lua
的编译, 由于我测试时使用的是Mac
平台, 同时电脑还装了Xcode
, 所以内部默认采用的编译器是clang
关于Clang
和GCC
的介绍, 可以参见之前的文章《xcode中三种编译器的区别》
本文为作者原创转载时请注明出处 谢谢