Premake学习记录
跟着TheCherno学习制作游戏引擎,其中用到了Premake5,以下是我对Premake5的一些理解
1.新建premake5.lua文件
2.打开文件编辑内容
3.内容结构如下:
解决方案的配置
workspace "Hazel" //Hazel为解决方案名
architecture "x86_64"
//解决方案平台为x64,"x86_64"改为“x64"结果不变,
//改为"x32"时,解决方案平台为win 32
startproject "Sandbox"
//将Sandbox设为开始项目
configurations //解决方案配置,默认配置是Debug,与顺序无关
{
"Debug",
"Release",
"Dist"
}
outputdir = "%{cfg.buildcfg}-%{cfg.system}-%{cfg.architecture}"
//cfg.buildcfg:解决方案配置名(Debug,Release等)
//cfg.system:平台系统名(window,linux等)
//cfg.architecture:解决方案平台名(x86,x86_x64)对应architecture "x32"/"x64"
//outputdir相当于全局变量,会在后面用到
项目的配置
project "Hazel" //生成的项目名
location "Hazel" //项目配置文件的生成路径
kind "SharedLib"
//配置类型(.dll)最后生成动态库
//如果"SharedLib" 改为 "ConsoleApp"则最后生成.exe应用程序
language "C++" //语言为c++
targetdir ("bin/" .. outputdir .."/%{prj.name}")
//prj.name为此项目名,指定输出目录
//形如 "bin\Debug-windows-x86\Hazel"
objdir ("bin-int/" .. outputdir .."/%{prj.name}")
//指定中间目录,形如bin-int\Debug-windows-x86\Hazel
//outputdir两边的..不可以去掉,否则报错,我猜是用来将变量值提取出来。
files //指定编译的文件类型
{
"%{prj.name}/src/**.h",
"%{prj.name}/src/**.cpp"
}
includedirs //附加包含目录,自定义头文件的位置
{
"%{prj.name}/vendor/spdlog/include"
}
filter "system:windows" //针对windows系统,进行如下配置
cppdialect "c++17" //c++语言标准
staticruntime "On" //
systemversion "latest" //windows SDK版本
defines //预处理器定义,也就是预定义宏
{
"HZ_PLATFORM_WINDOWS",
"HAZEL_BUILD_DLL"
}
postbuildcommands //对 编译链接得到的二进制文件 进行操作
{
("{COPY} %{cfg.buildtarget.relpath} ../bin/" ..outputdir .. "/SandBox/") //将当前目标项目生成的dll文件copy到指定的目录内
}
filter "configurations:Debug"
defines "HZ_DEBUG"
symbols "On" //将项目管理器属性中 运行库改为多线程(MT)
filter "configurations:Release"
defines "HZ_RELEASE"
optimize "On" //开启优化
filter "configurations:Dist"
defines "HZ_DIST"
optimize "On"
//来自Sandbox项目
links
{
"Hazel" //链接Hazel项目给Sandbox项目
}
4.将premake5.lua文件放在与解决方案相同的目录下(如果没有解决方案,则与项目目录放在一起) 打开命令行 输入 vendor\bin\premake\premake5.exe vs2017
vendor\bin\premake\是相对于premake5.lua所在位置的目录,vs2017是生成解决方案的版本
总结
premake5可以用来生成解决方案,并对项目管理器的属性进行相关配置,此脚本的一切配置都可以通过项目管理器属性配置实现。优点是可以将自己的个性化配置保存到premake5.lua文件中,便于后来者使用。
官方教程链接