eryar

PipeCAD - Plant Piping Design Software.
RvmTranslator - Translate AVEVA RVM to OBJ, glTF, etc.
posts - 603, comments - 590, trackbacks - 0, articles - 0

构建工具Premake

Posted on 2023-09-18 20:49 eryar 阅读(279) 评论(0)  编辑 收藏 引用 所属分类: 2.OpenCASCADE

构建工具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是理想的构建工具。

 


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理