zoukankan      html  css  js  c++  java
  • 用premake编译lua

    lua发布的代码中,本身提供了makefile用来在多个平台上编译lua,但是针对windows,它提供的是mingw:

    mingw:
        $(MAKE) "LUA_A=lua51.dll" "LUA_T=lua.exe" \
        "AR=$(CC) -shared -o" "RANLIB=strip --strip-unneeded" \
        "MYCFLAGS=-DLUA_BUILD_AS_DLL" "MYLIBS=" "MYLDFLAGS=-s" lua.exe
        $(MAKE) "LUAC_T=luac.exe" luac.exe

    本质上来讲,还是GNU那套工具链。

    这不是native的windows的做法 - 真正native的做法是用Visual Studio编译,链接到微软提供的crt库。

    有人提供了一套visual studio的solution:http://lua-users.org/wiki/BuildingLua, 如此你不但要维护多个工程文件,还要维护多个visual studio的版本(或者自动migration), 既然premake继承了lua的良好传统,用简洁而又优美的方式实现跨平台的编译;lua理应享受这一自己带来的便利:

    solution 'lua'
        configurations {'Debug', 'Release'}
        platforms {'x32', 'x64'}
        
        if os.get() == "windows" then
            defines '_CRT_SECURE_NO_WARNINGS'
        end
        
        -- the lua library
        project 'lualib'
            targetname 'lua' -- rename the target library to lua
            kind 'StaticLib'
            language 'C'
            files {'lapi.c', 'lcode.c', 'ldebug.c', 'ldo.c', 'ldump.c', 'lfunc.c', 'lgc.c', 'llex.c', 'lmem.c', 'lobject.c', 'lopcodes.c', 'lparser.c', 'lstate.c', 'lstring.c', 'ltable.c', 'ltm.c', 'lundump.c', 'lvm.c', 'lzio.c', 'lauxlib.c', 'lbaselib.c', 'lbitlib.c', 'lcorolib.c', 'ldblib.c', 'liolib.c', 'lmathlib.c', 'loslib.c', 'lstrlib.c', 'ltablib.c', 'loadlib.c', 'linit.c'}
            
        -- the lua interpret
        project 'lua'
            kind 'ConsoleApp'
            language 'C'
            links 'lualib'
            if os.get() == "linux" then
                links {'m'}
            end
            files 'lua.c'
        
        -- the lua compiler
        project 'luac'
            kind 'ConsoleApp'
            language 'C'
            links 'lualib'
            files 'luac.c'

    编译lua一般需要知道下面几个文件:

    • Makefile, src/Makefile - 编译配置
    • doc/readme.html - 编译说明
    • src/luaconf.h - lua特性配置

    lua一般编译成三个部分,lua库, lua解释器与luac编译器,这些target的source在doc/readme.html中都有说明:

    library:
    lapi.c lcode.c lctype.c ldebug.c ldo.c ldump.c lfunc.c lgc.c llex.c lmem.c lobject.c lopcodes.c lparser.c lstate.c lstring.c ltable.c ltm.c lundump.c lvm.c lzio.c lauxlib.c lbaselib.c lbitlib.c lcorolib.c ldblib.c liolib.c lmathlib.c loslib.c lstrlib.c ltablib.c loadlib.c linit.c
    interpreter:
    library, lua.c
    compiler:
    library, luac.c

    好了,据此写出一个极其简单的premake4 solution:

    在windows下编译:

    premake4 vs2008
    vcbuild lua.sln "Debug|Win32"

    linux下:

    premake4 gmake
    make

  • 相关阅读:
    凹凸函数
    HashMap数据类型使用注意不能使用基本数据类型
    Tomcat部署发布JSP应用程序的三种方法
    Ubuntu忘记密码,进不了系统的解决方法
    matlab之运算符及其优先级
    java和tomcat配置
    MySQL中 MySQL X.X Command Line Client 一闪而过
    Pearson(皮尔逊)相关系数
    CG, DCG, NDCG
    C#中ListBox中SelectedItem使用注意
  • 原文地址:https://www.cnblogs.com/baiyanhuang/p/2743397.html
Copyright © 2011-2022 走看看