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的历史版本
然后在最下方找到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界面可以找到脚本编辑的说明。