c++ 轻量跨平台构建系统 Premake

一 构建系统简介

1.1 什么是构建系统

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

  1. 项目模块依赖关系维护
  2. 目标的可配置化(不同系统:Windows,Mac…;不同平台:Win32,Win64,Amd64…)
  3. 目标生成的自动化

1.2 为什么使用构建系统

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

  • 减少开发人员的知识成本(比如对同一流程,但多种平台,多种开发环境差异化的了解)
  • 减少项目项目变动的维护成本
    – VisualStudio 的编译选项规则,配置方法
    – Xcode 的编译选项规则,配置方法
    – 其他。。。
  • 减少模块的维护成本
    – 协同人员对工程文件,目录的修改冲突
  • 减少平台,系统生成的差异化成本(可以简洁地配置不同的平台与系统)
    – 通过简单的配置,可以灵活,快速地添加,修改,更新模块
    – 可以方便的处理依赖关系,提高稳定性和编译速度
  • 使用脚本和配置文件,实现自动清理,生成所需平台,系统,调试环境,测试流程,然后发布版本

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

1.3 常见的构建系统

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

  • CMake
  • Scons
  • Premake

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

二 Premake 的下载和使用

2.1 什么是Premake

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

  • 生成开发人员喜欢的平台,工具集(协同开发的人员,可以使用不同的平台和开发工具)
  • 通过脚本保持不同平台,工具集下的项目配置同步(比如新建文件夹,引入新的库文件)
  • 通过脚本来快速更新许多不同的大型代码库,并重新生成项目(比如对依赖的多种著名库的版本更新)
  • 快速升级工具集的版本(比如无缝地从VisualStudio 2010升级到VisualStudio 2019)

目前支持:

  • Microsoft Visual Studio 2005-2019
  • GNU Make,包括 CygwinMinGW
  • 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

2.2 下载和使用

2.2.1 下载Premake

打开上述地址,选择自己系统的版本。
在这里插入图片描述
在这里插入图片描述

2.2.2 Windows 下使用 Premake

  • 新建文件夹Text
  • premake.exe放到Text文件夹中
  • 在文件夹内新建 main.cpp
#include <iostream>
int main()
{
    std::cout << "Premake Project Test" << std::endl;
    system("pause");
    return 0;
}
  • 在文件夹内新建 premake5.lua
workspace "Test" -- 解决方案
    startproject "Test" -- 开始项目

    configurations
    {
        "Debug",
        "Release"
    }

    platforms
    {
        "Win32",
        "Win64"
    }

    filter "platforms:Win32"
        system "Windows"
        architecture "x32"

    filter "platforms:Win64"
        system "Windows"
        architecture "x86_64"

project "Test" -- 项目
    kind "ConsoleApp" -- 控制台应用
    language "C++"

    files
    {
        "./**.cpp" -- 当前文件夹所有.cpp文件
    }

  • 在文件夹内输入 cmd Enter。它会自动打开cmd.exe,并切换到当前目录
  • 在这里插入图片描述
  • 在命令行中输入 premake5.exe vs2019 Enter
  • 会看到 Test.slnTest.vcxproj 的生成,然后打开Test.sln运行

三 Premake 项目构建

3.1 实例项目

  • 使用 Visual Studio 2019 创建项目
    • 1.创建启动项目在这里插入图片描述
      在这里插入图片描述
    • 2.创建库项目
      在这里插入图片描述
      在这里插入图片描述
      右键LibUtial项目->属性,应用类型改为静态库
      在这里插入图片描述
      配置输出目录为 $(SolutionDir)bin$(PlatformName)$(Configuration)$(ProjectName)
      配置中间目录为 $(SolutionDir)bin_obj$(PlatformName)$(Configuration)$(ProjectName)
      右键Totorial项目->属性,输出目录中间目录同上
      在这里插入图片描述
      附加包含目录 设置为 $(SolutionDir)\LibUtial
      右键Tutorial项目->设置为启动项目
      在这里插入图片描述
      右键引用添加引用 LibUtial
    • 3.添加文件
      在这里插入图片描述
      分别点击两个项目,然后点击上面的按钮显示所有文件
      然后点击LibUtial,按 Ctrl + Shift + A 新建 libutil.cpplibutil.h
    • 4编辑代码
      • libutil.cpp
        在这里插入图片描述
      • libutil.h
        在这里插入图片描述
      • Totorial.cpp
        在这里插入图片描述
        F5 得到输出结果
        在这里插入图片描述
  • 使用 Premake 创建项目
    • 1.新建目录树

      • Tutorial
        • LibUtial
        • Tutorial
    • 2.拷贝文件

      • libutil.cpplibutil.hTutorialP\LibUtial
      • Tutorial.cppTutorialP\Tutorial
      • 拷贝 premake5.luapremake5.exeTutorialP
      • 修改 premake5.lua
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
    • 运行 cmd.exe 进入 TutorialP 目录

    • 输入 premake5.exe vs2019

    • 会看到生成vs2019的项目,打开解决方案,按 F5 会得到相同结果

  • 实例项目地址

3.2 常用 Premake 脚本

  • 3.1.1 结构 (简版)
    • 解决方案
      • 方案名称
      • 起始项目
      • 配置方案(各平台,各系统)
    • 项目1
      • 应用类别
      • 语言
      • 输出路径,中间路径
      • 其他
    • 项目链接
    • 项目配置
      • 包含路径
      • 源码路径
      • 其他
    • 项目2
    • 项目。。
  • 3.1.2 脚本
    • workspace 解决方案名称
      • 方案作用域包含所有项目
    • startproject 起始项目名称
    • configurations 配置名称
    • platforms 平台名称
    • filter 筛选器
      • 用字符串筛选各种配置
      • 在条件下添加独特的配置
    • system 系统
    • architecther 结构(平台)
    • project 项目名称
      • 项目配置以此划分作用域
    • kind 应用类别
    • language 语言
    • targetdir 输出路径
    • objdir 中间路径
    • files 编译文件
      • 可以使用通配符
      • 可以指定具体文件
    • 自定义变量(参考Lua)

语法细节:https://github.com/premake/premake-core/wiki 通过下面输入关键词搜索
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值