IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    构建工具Premake

    eryar发表于 2023-09-18 12:49:00
    love 0

    构建工具Premake

    经常用Visual Studio写一些小程序来验证OpenCASCADE的功能,每次创建项目后都配置头文件,库路径,程序运行时还要配置Debug的环境变量,比较麻烦。也尝试过CMake和QMake,都不太理想。CMake学习曲线陡峭一点,还会生成一堆文件。QMake简单些,但是有的选项不支持。直到看到一个开源的游戏程序Overload,看其编译说明使用了Premake来构建。

    使用IMGUI生成的软件界面比较酷炫,使用Premake生成Visual Studio解决方案。

    1 什么是构建系统

    构建系统(BuildSystem)是用来从源码生成用户可以使用的目标(Targets)的自动化工具。目标可以包括库,可执行文件,或者生成的脚本等等。

    项目模块依赖关系维护 ;

    目标的可配置化(不同系统:Windows,Mac…;不同平台:Win32,Win64,Amd64…)

    目标生成的自动化

    2 为什么使用构建系统

    主要用于提高开发人员的效率与稳定,测试与发布的效率

    -减少开发人员的知识成本(比如对同一流程,但多种平台,多种开发环境差异化的了解)

    -减少项目项目变动的维护成本

    – VisualStudio 的编译选项规则,配置方法

    – Xcode 的编译选项规则,配置方法

    – 其他。。。

    -减少模块的维护成本

    – 协同人员对工程文件,目录的修改冲突

    减少平台,系统生成的差异化成本(可以简洁地配置不同的平台与系统)

    – 通过简单的配置,可以灵活,快速地添加,修改,更新模块

    – 可以方便的处理依赖关系,提高稳定性和编译速度

    使用脚本和配置文件,实现自动清理,生成所需平台,系统,调试环境,测试流程,然后发布版本。

    总的来说,就是使生成过程更加简洁,灵活,高效,自动化。

    3 常见的构建系统

    主流的可以跨平台,支持C++的构建系统

    - CMake

    - Scons

    - Premake

    其他还有 GNU Make,GNU autotools,Apache Ant(主要用于Java),Gradle(主要用于Java)

    4 什么是Premake

    Premake 是一种命令工具,通过读取项目脚本,来生成各种开发环境的项目文件。主要用于:

    生成开发人员喜欢的平台,工具集(协同开发的人员,可以使用不同的平台和开发工具)

    通过脚本保持不同平台,工具集下的项目配置同步(比如新建文件夹,引入新的库文件)

    通过脚本来快速更新许多不同的大型代码库,并重新生成项目(比如对依赖的多种著名库的版本更新)

    快速升级工具集的版本(比如无缝地从VisualStudio 2010升级到VisualStudio 2019)

    目前支持:

    Microsoft Visual Studio 2005-2019

    GNU Make,包括 Cygwin 和 MinGW

    XCode

    Codelite

    Premake 5.0 目前支持:

    32 和 64 位平台

    Xbox 360(仅支持Visual Studio)

    插件模块可以支持其他语言,框架,和工具集

    Premake 是存粹的旧版C应用程序,发布为一个单个的,非常小的exe文件。支持完整的Lua脚本环境

    开源地址:https://github.com/premake/premake-core

    下载地址:https://premake.github.io/

    实例地址:https://github.com/wuguyannian/tutorial_premake

    5 使用Premake

    使用premake来构建一个使用了glfw, occt和imgui的程序。从配置文件可以看出,配置比CMake要简单:

    workspace "OcctImgui"
        configurations {"Debug", "Release"}
        system "Windows"
        platforms {"Win64"}
        architecture "X64"
        language "C++"
    project "OcctImgui"
        kind "ConsoleApp"
        language "C++"
        targetdir "build/bin/%{cfg.buildcfg}"
        objdir "build/obj/%{cfg.buildcfg}"
        files { "**.h",  "**.cpp"}
        -- Header files.
        includedirs
        {
            "C:/OpenCASCADE-7.6.0/opencascade-7.6.0/inc", 
            "C:/glfw-3.3.8/include"
        }
        -- Library files.
        links
        {
            "TKernel", "TKMath", "TKG2d", "TKG3d", "TKGeomBase", "TKGeomAlgo", "TKBRep", "TKTopAlgo", "TKPrim", "TKMesh", "TKService", "TKOpenGl", "TKV3d", 
            "glfw3"
        }
        filter "configurations:Debug"
          defines { "DEBUG" }
          symbols "On"
          libdirs
          {
              "C:/OpenCASCADE-7.6.0/opencascade-7.6.0/win64/vc14/libd", 
              "C:/glfw-3.3.8/lib"
          }
          debugenvs
          {
              "path=%path%;C:/OpenCASCADE-7.6.0/opencascade-7.6.0/win64/vc14/bind"
          }
       filter "configurations:Release"
          defines { "NDEBUG" }
          symbols "Off"
          optimize "On"
          libdirs
          {
              "C:/OpenCASCADE-7.6.0/opencascade-7.6.0/win64/vc14/lib", 
              "C:/glfw-3.3.8/lib"
          }
          debugenvs
          {
              "path=%path%;C:/OpenCASCADE-7.6.0/opencascade-7.6.0/win64/vc14/bin"
          }

    通过premake生成的Visual Studio解决方案很干净,没有多余的文件。后面再要写一个小的验证程序时,只需要复制premake5.lua修改一下即可,很方便。对于小的验证程序来说,使用premake是理想的构建工具。

     



    eryar 2023-09-18 20:49 发表评论


沪ICP备19023445号-2号
友情链接