该系列只做记录 不做教程 所以文章简洁直接 会列出碰到的问题和解决方案 只适合C++萌新
文章目录
Permake5
Premake5 是一个跨平台的构建配置工具,它允许开发者通过使用一个简单的脚本语言(Lua)来定义项目的构建过程。Premake5 主要用于生成适用于不同平台的项目文件(如 Visual Studio、Xcode、Makefile 等),并且可以自动化构建过程、依赖关系管理和平台配置。它的目的是简化和统一多个平台的构建工作,特别适用于 C++ 项目。
GitHub链接: premake-core

为什么使用 Premake?
1.跨平台支持: Premake5 支持多个平台,包括 Windows、Linux、macOS 等。你可以使用一个脚本文件为不同的操作系统生成相应的构建文件,比如 Visual Studio 项目、Xcode 工程、Makefile 等。
2.Lua 脚本语言: Premake5 使用 Lua 语言来定义项目的构建配置。这使得构建脚本非常灵活和易于定制。Lua 作为一种轻量级的脚本语言,可以方便地扩展和修改,使得 Premake5 的使用既直观又功能强大。
3.简化的项目定义: 与其他构建系统(如 CMake、SCons 等)相比,Premake5 的脚本文件语法更为简洁直观。你只需要定义基本的项目配置(如源文件、目标文件、库、编译选项等),Premake 会根据配置自动生成适合各平台的构建文件。
4.配置灵活性: Premake5 支持多个构建配置(如 Debug、Release、Dist 等),并允许开发者为每种配置设置不同的编译选项、宏定义、优化级别等。你可以为不同的构建模式(调试、发布等)指定不同的设置。
5.集成与扩展: 通过 Lua 脚本,Premake5 提供了高度的扩展性。你可以创建自定义的构建逻辑,集成其他工具(如单元测试、静态分析工具、代码格式化工具等),或者根据需要定制构建过程。
6.生成的项目文件标准化: Premake5 的一个重要特点是生成的项目文件标准化且易于管理。无论是在团队中协作开发,还是在版本控制系统中,Premake5 脚本文件本身是纯文本格式的,可以直接进行版本管理。这避免了 IDE 特定配置(如 Visual Studio 或 Xcode 的特定设置)带来的问题。
7.与现有构建系统的兼容性: Premake5 能与现有的构建系统兼容。例如,你可以用 Premake 生成 Visual Studio 或 Xcode 的项目文件,但仍然可以通过这些工具继续执行编译工作。这提供了灵活性,尤其适合现有大型项目。
一个简单的 Premake5 脚本示例如下:
javascript
-- 定义工作区
workspace "MyGameEngine"
configurations { "Debug", "Release" }
-- 定义项目
project "MyEngine"
kind "StaticLib"
language "C++"
files { "src/**/*.cpp", "src/**/*.h" }
-- 设置包含路径
includedirs { "include", "external/spdlog/include" }
-- Windows 平台的设置
filter "system:windows"
systemversion "latest"
staticruntime "On"
-- Debug 配置的设置
filter "configurations:Debug"
defines { "DEBUG" }
symbols "On"
-- Release 配置的设置
filter "configurations:Release"
defines { "NDEBUG" }
optimize "On"
项目实战
总结一下:
1.主要是文件夹路径 和 .h .cpp文件要选择好,不要选错文件 和多选其它第三方库
2.以及拷贝Dll的时候 拷贝到运行目录
3.使用 UTF-8 编码的多字节字符集 -> buildoptions { "/utf-8" }

详细代码:
javascript
workspace "ATEngine"
architecture "x64" -- 指定项目的架构为x64
configurations { "Debug", "Release", "Dist" } -- 配置项目的构建模式:Debug(调试),Release(发布),Dist(发布版)
outputdir = "%{cfg.buildcfg}-%{cfg.system}-%{cfg.architecture}" -- 输出目录的格式,结合构建配置、系统和架构
-- ===============================
-- ATEngine 项目(DLL 动态库)
-- ===============================
project "ATEngine"
location "ATEngine" -- 项目的位置
kind "SharedLib" -- 目标类型为共享库(动态库)
language "C++" -- 使用 C++ 编程语言
buildoptions { "/utf-8" } -- 构建选项,设置文件编码为 UTF-8
targetdir ("x64/Debug/" .. outputdir .."/%{prj.name}") -- 设置目标输出目录
objdir ("x64/Debug/" .. outputdir .."/%{prj.name}") -- 设置对象文件输出目录
-- 添加项目需要的源文件
files
{
"%{prj.name}/Scripts/**.h", -- 所有头文件
"%{prj.name}/Scripts/**.cpp" -- 所有源文件
}
-- 移除不需要编译的文件
removefiles
{
"%{prj.name}/Scripts/ATEngine/vendor/spdlog/**.cpp" -- 移除spdlog库的cpp文件
}
-- 添加需要包含的头文件目录
includedirs
{
"%{prj.name}/Scripts/ATEngine/vendor/spdlog/include" -- spdlog库的头文件目录
}
filter "system:windows" -- 针对Windows系统的构建配置
cppdialect "C++17" -- 使用C++17标准
staticruntime "On" -- 使用静态链接运行时库
systemversion "10.0.22621.0" -- 设置Windows的SDK版本
defines {
"HZ_PLATFORM_WINDOWS", -- 定义平台为Windows
"HZ_BUILD_DLL" -- 定义为DLL构建
}
postbuildcommands {
-- 在构建后,将目标文件复制到Sandbox目录
"{COPY} %{cfg.buildtarget.relpath} ../x64/Debug/" .. outputdir .. "/Sandbox"
}
-- 配置不同构建模式的设置
filter "configurations:Debug"
defines "HZ_DEBUG" -- 定义调试模式
symbols "On" -- 开启调试符号
filter "configurations:Release"
defines "HZ_RELEASE" -- 定义发布模式
optimize "On" -- 开启优化
filter "configurations:Dist"
defines "HZ_DIST" -- 定义发布版模式
optimize "On" -- 开启优化
-- ===============================
-- Sandbox 项目(最终程序)
-- ===============================
project "Sandbox"
location "Sandbox" -- 项目的位置
kind "ConsoleApp" -- 目标类型为控制台应用程序
language "C++" -- 使用 C++ 编程语言
buildoptions { "/utf-8" } -- 构建选项,设置文件编码为 UTF-8
targetdir ("x64/Debug/" .. outputdir .. "/%{prj.name}") -- 设置目标输出目录
objdir ("x64/Debug/" .. outputdir .. "/%{prj.name}") -- 设置对象文件输出目录
-- 添加项目需要的源文件
files
{
"%{prj.name}/Scripts/**.h", -- 所有头文件
"%{prj.name}/Scripts/**.cpp" -- 所有源文件
}
-- 添加需要包含的头文件目录
includedirs
{
"ATEngine/Scripts/ATEngine/vendor/spdlog/include", -- 引入 ATEngine 项目的 spdlog 库头文件目录
"ATEngine/Scripts" -- 引入 ATEngine 项目的源文件目录
}
-- 链接 ATEngine 动态库
links
{
"ATEngine"
}
filter "system:windows" -- 针对Windows系统的构建配置
cppdialect "C++17" -- 使用C++17标准
staticruntime "On" -- 使用静态链接运行时库
systemversion "10.0.22621.0" -- 设置Windows的SDK版本
defines
{
"HZ_PLATFORM_WINDOWS" -- 定义平台为Windows
}
-- 配置不同构建模式的设置
filter "configurations:Debug"
defines "HZ_DEBUG" -- 定义调试模式
symbols "On" -- 开启调试符号
filter "configurations:Release"
defines "HZ_RELEASE" -- 定义发布模式
optimize "On" -- 开启优化
filter "configurations:Dist"
defines "HZ_DIST" -- 定义发布版模式
optimize "On" -- 开启优化