本序列由澳大利亚的一个游戏引擎爱好者整理制作,使用了前瞻的语言技术,
经常多次的修改制作,一个个小的知识点贯通,非常具有引导学习意义!
Bilibili站转载学习,非个人研究,鸣谢!
原作者Github
Bilibili直达链接
YouTube直达链接
#1 premake是什么
#2 premake的好处
#1 2
premake是一个轻量级的项目管理软件,官方网站
使用premake可以使得项目非常简洁,对于跨平台开发非常友好,支持windows\linux\macosx;
比如我在windows上使用vs进行开发,其他人在linux使用其他的IDE开发,为了保持项目的配置统一,
使用一个管理软件来配置;传统的做法是使用cmake来处理,但cmake体量大并且有些不好用的地方;
premake非常的轻量级并且使用lua作为配置文件;
使用premake之后,和ide相关的文件都可以不用再提交了
#1 下载premake.exe
#2 配置当前项目的premake5.lua文件
#3 添加shell脚本生成
#1 2
-- premake5.lua
-- 配置的工作区域是全局的,通用的配置
workspace "Aurora" -- 设置工作区目录
architecture "x64" -- 设置项目使用的架构
startproject "Sandbox" -- 默认启动的项目
configurations -- 配置概述,解决方案平台
{
"Debug",
"Release",
"Dist"
}
-- 配置输出目录,cfg既是上面的configurations的简写
-- 拼接目录类似:Debug-windows-x86_64
outputdir = "%{cfg.buildcfg}-%{cfg.system}-%{cfg.architecture}"
-- 开始配置一个静态库子项目'Aurora'
project "Aurora"
location "Aurora" -- 项目的根目录,相对于当前文件来说,同级
kind "SharedLib" -- 项目的类型,SharedLib静态库
language "C++" -- 语言
-- 生成的目标文件夹bin + Debug-windows-x86_64 + Aurora
-- prj是project的简写
targetdir ("bin/" .. outputdir .. "/%{prj.name}")
-- 中间临时文件生成目录
objdir ("bin-int/" .. outputdir .. "/%{prj.name}")
-- 当前项目的源码目录
files
{
"%{prj.name}/src/**.h",
"%{prj.name}/src/**.cpp"
}
-- 当前项目需要附加的包含库
includedirs
{
"%{prj.name}/vendor/spdlog/include"
}
filter "system:windows" -- 设置windows平台
cppdialect "C++17" -- 使用C++17标准
staticruntime "On" -- 多线程调试
systemversion "latest" -- 最新版本的系统
-- 添加windows平台上的预处理器定义
defines
{
"AO_PLATFORM_WINDOWS",
"AO_BUILD_DLL"
}
-- 编译后处理,复制一份dll到Sandbox项目下面
postbuildcommands
{
-- {COPY}复制,之后的命令以空格来划分
-- %{cfg.buildtarget.relpath} = 'bin\Debug-windows-x86_64\Aurora\Aurora.dll'
("{COPY} %{cfg.buildtarget.relpath} ../bin/" .. outputdir .. "/Sandbox")
}
filter "configurations:Debug" -- 配置Debug的概述
defines "AO_DEBUG" -- 添加Debug的预编译器定义
symbols "On" -- 设置此宏有效
filter "configurations:Release"
defines "AO_RELEASE"
optimize "On"
filter "configurations:Dist"
defines "AO_DIST"
optimize "On"
-- 本来每个项目都要独立配置,这里就配置到一个文件里面
project "Sandbox"
location "Sandbox"
kind "ConsoleApp"
language "C++"
targetdir ("bin/" .. outputdir .. "/%{prj.name}")
objdir ("bin-int/" .. outputdir .. "/%{prj.name}")
files
{
"%{prj.name}/src/**.h",
"%{prj.name}/src/**.cpp"
}
includedirs
{
"Aurora/vendor/spdlog/include",
"Aurora/src"
}
-- 设置此项目引用'Aurora'项目
links
{
"Aurora"
}
filter "system:windows"
cppdialect "C++17"
staticruntime "On"
systemversion "latest"
defines
{
"AO_PLATFORM_WINDOWS"
}
filter "configurations:Debug"
defines "AO_DEBUG"
symbols "On"
filter "configurations:Release"
defines "AO_RELEASE"
optimize "On"
filter "configurations:Dist"
defines "AO_DIST"
optimize "On"
#3
CALL vendor\bin\premake\premake5.exe vs2019
PAUSE
#1 .gitignore
#2 移除已经版本管理的cache
#1
# directory
.vs/
bin/
bin-int/
# file
*.sln
*.vcxproj
*.filters
*.user
#2
git rm -r --cached .