【Premake】构建工程

Premake

一、什么是Premake?

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

开源地址:https://github.com/premake/premake-core
下载地址:https://premake.github.io
实例地址:https://github.com/wuguyannian/tutorial_premake

二、为什么使用Premake

  • 通过允许开发人员使用他们喜欢的平台和工具集,最大限度地扩大您的潜在受众。
  • 允许开发人员自定义生成,并输出特定于该配置的项目文件。
  • 通过按需从预制脚本生成项目,使工具集之间的构建保持同步。
  • 使用许多工作区和项目快速更新大型代码库:在预制脚本中进行更改一次,然后重新生成。
  • 为您不拥有的工具集创建工程文件。
  • 快速升级到所选工具集的较新版本。
  • 编写常见配置和生成维护任务的脚本.

三、主要特点

Premake 5.0 的当前开发版本可以生成针对以下目标的 C、C++ 或 C# 项目:

  • 微软视觉工作室 2005-2019
  • GNU Make,包括 Cygwin 和 MinGW
  • Xcode
  • 代码精简版

以前版本的Premake还支持导出MonoDevelopment和Code::Blocks。

预制 5.0 生成的项目可以支持:

  • 32 位和 64 位内部版本
  • Xbox 360(仅限Visual Studio)

附加模块可以通过支持其他语言、框架和工具集来扩展预制件。

除了项目生成功能外,Premake 还提供完整的 Lua 脚本环境,支持复杂配置任务的自动化,例如设置新的源代码树检出或创建部署包。这些脚本将在任何平台上运行,结束批处理/外壳脚本复制。

Premake是一个“普通的旧C”应用程序,作为单个可执行文件分发。它很小,重约200K。它不需要安装任何其他库或运行时,并且应该在几乎任何地方构建和运行。它目前正在Windows,Mac OS X,Linux和其他POSIX环境中进行测试和使用。它只使用少数依赖于平台的例程(主要是目录管理)。添加对其他工具集和语言的支持非常简单。源代码在 BSD 许可证下可用。源代码托管在 GitHub 上;文件下载目前托管在SourceForge上。

四、Premake的下载和使用

4.1 Premake下载

在premake的github地址,可以进行源码下载,点击历史发布的版本,也就是tag标志,查看premake的历史版本

img

在这里插入图片描述

然后在最下方找到window的安装压缩包,点击下载。

在这里插入图片描述

解压之后便可以获得premake5的应用程序:需要记住.exe文件存放的位置,构建的时候使用。

在这里插入图片描述

4.2 编辑premake脚本

创建文件premake5.lua,放在工程的根目录下,然后在vs里进行编辑(其他编辑器也可以),这里以OpenGL中配置GLFW和GLAD为例,编写了如下的premake5.lua文件:

workspace "LearnOpenGL" --指定工作目录
	architecture "x64"  --指定架构,这里选择的是 x64
	startproject "LearnOpenGL" --启动项目

	configurations --配置管理
	{
		"Debug",
		"Release",
		"Dist"
	}
outputdir = "%{cfg.buildcfg}-%{cfg.system}-%{cfg.architecture}"  --输出目录 cfg表示configuration,第一个%后面的内容表示配置方式,第二个%后面表示操作系统,第三个后面为架构,输出的文件夹名字为:“Debug-windows-x86_64”

--Include directories
IncludeDir = {} --这里表示创建了IncludeDir “数组”?表示可以设置多个Dir目录
IncludeDir["GLFW"] = "LearnOpenGL/vendor/GLFW/include"
IncludeDir["Glad"] = "LearnOpenGL/vendor/Glad/include"
-- Include表示包含子项目目录,需要在其项目文件夹中包含premake5.lua文件
include "LearnOpenGL/vendor/GLFW"
include "LearnOpenGL/vendor/Glad"

--项目
project "LearnOpenGL"                --项目名称
	location "LearnOpenGL"          --项目位置
	kind "ConsoleApp" 				   --项目类型 控制台程序
	language "C++" 						 --项目使用的语言
	cppdialect "C++17"				   --C++语言标准
	staticruntime "on"					  --静态运行:开

	targetdir ("bin/" .. outputdir .. "/%{prj.name}")  --目标目录,一般用于放置生成的.exe文件
	objdir ("bin-int/" .. outputdir .. "/%{prj.name}") --中间目录,放生成的.obj文件等

	files  --表示项目包含文件,没有在里面的文件是不被项目包含的
	{
		"%{prj.name}/src/**.h",
		"%{prj.name}/src/**.cpp"
	}

	defines --定义的宏,这里是忽略某种警告
	{
		"_CRT_SECURE_NO_WARNINGS"
	}

	includedirs --头文件目录
	{
		"%{prj.name}/src",
		"%{IncludeDir.GLFW}",
		"%{IncludeDir.Glad}"
	}

	links --链接,引用的项目或者库
	{
		"GLFW",
		"Glad",
		"opengl32.lib"
	}
--过滤器
	filter "system:windows"
		systemversion "latest"
--Debug配置属性
	filter "configurations:Debug"
        runtime "Debug"
        symbols "on" -- 开启调试符号
--Release配置属性
    filter "configurations:Release"
        runtime "Release"
        optimize "on" --开启优化参数,为了提升release速度

4.3 构建premake工程

在根目录cmd,键入vendor\bin\premake\premake5.exe vs2022 (这是我存放premake5.exe的文件目录),然后就等待没有报错就说明构建成功。

在这里插入图片描述

之后打开项目属性页,观察构建结果:

在这里插入图片描述

在这里插入图片描述

可以看到目录和标准都按照我们设置的显示了,说明构建成功。OpenGL项目也成功和GLFW以及GLAD链接:
在这里插入图片描述

添加测试代码,并运行,运行之后发现根目录多出了我们设置的输出文件夹:

在这里插入图片描述

bin文件夹下面存放了.exe文件:

在这里插入图片描述

bin-int文件夹中则是中间文件:

在这里插入图片描述

如果不指定这两个输出目录,那么输出的结果应该分别在根目录和项目目录中,这里我随便创建了一个工程:
在这里插入图片描述
在这里插入图片描述

就是这两个x64的文件夹,经过指定目录,整个项目结构更加简洁,找某些文件也更加容易,这也是进行项目管理的一大初衷。

至此,Premake构建项目就到这里了,如果要在脚本中添加其他的功能,可以参考官方的文档Premake

在Reference界面可以找到脚本编辑的说明。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值