Premake自动部署OpenGL项目

        很多朋友们在构建项目的时候应该都使用过CMake,在github和gitee的很多项目上面都能看到关于CMake的脚本。不过笔者认为,这东西有时候实在是过于繁重了,特别是这个构建的项目足够大的时候。在这里笔者为大家介绍一款轻量轻量化的软件Premake,它可以很方便构建visual studioXCode 项目。如果看过笔者的《visual studio OpenGL配置》这篇文章的朋友,就能领会到项目配置是一下多么麻烦的事,每个新的OpenGL项目都需重新配置的话,那将会是一件让人非常恼火的事情,这里笔者创建一个项目OpenGL项目初始化可以棒大家省去这个烦恼,通过这个项目来告诉大家premake的使用方法。

1、premake下载

下载网址:premake下载网址 因为要进入github所以尽量开加速器

这里笔者选择windows版的压缩进行下载,因为笔者使用的是windows10系统。如果如果读者使用的是其他的系统,就请根据自己系统进行下载。

整个压缩包当中,需要使用到的是premake5.exe文件

不过大家也可以不用下载,为到家准备的项目OpenGL项目初始化当中有这个启动程序。

大家可以自行选择现在或者是克隆这个项目

2、premake 的使用

        premake 需要编写premake脚本然后然后启动premake5.exe 进行解释运行。

1、premake脚本

premake5.lua 脚本具体如下

workspace "OpenGLInitial"    //对应的解决方案的名称
	architecture "x86_64"    //程序采用的架构

	configurations{          //配置管理器
		"Debug",             
		"Release"
	}

outputdir = "%{cfg.buildcfg}-%{cfg.system}-%{cfg.architecture}" //定义变量

project "GLAD"            //项目的名称
	location "GLAD"       //指定文件的路径
	kind "StaticLib"      //输出形式
	language "C++"        //编码语言

	targetdir("bin/" ..outputdir.. "/%{prj.name}")        //输出文件的路径
    objdir ("bin-int/" ..outputdir.. "/%{prj.name}")      //中间文件

	files{
		"%{prj.name}/include/**.h",                       //项目当中需要包含的文件
		"%{prj.name}/src/**.c"                           
	}

	includedirs{                                          //附加应用路径
		"%{prj.name}/include"
	}

	filter "system:windows"                               //使用系统
		cppdialect "C++17"                                //C++版本
		staticruntime "On"                                //是否支持多线程
		systemversion "latest"                            //系统版本

	filter "configurations:Debug"                         //目前不知道什么作用
		defines "GL_DEBUG"
		symbols "On"

	filter "configurations:Release"
		defines "GL_RELEASE"
		symbols "On"

project "GLFW"
	location "GLFW"
	kind "StaticLib"
	language "C++"

	targetdir("bin/"..outputdir.."/%{prj.name}")
	objdir("bin-int/"..outputdir.."/%{prj.name}")

	files{
		"%{prj.name}/include/**.h",
		"%{prj.name}/src/**.c",
		"%{prj.name}/src/**.h",
		"%{prj.name}/deps/**.h",
		"%{prj.name}/deps/**.c"
	}

	includedirs{
		"%{prj.name}/include"
	}

	filter "system:windows"
		cppdialect "C++17"
		staticruntime "On"
		systemversion "latest"

	defines{
		"_GLFW_WIN32",
		"_CRT_SECURE_NO_WARNINGS"
	}
		
	filter "configurations:Debug"
		defines "GL_DEBUG"
		symbols "On"

	filter "configurations:Release"
		defines "GL_RELEASE"
		symbols "On"

project "ImGUI"
	location "ImGUI"
	kind "StaticLib"
	language "C++"

	targetdir("bin/" ..outputdir.. "/%{prj.name}")
	objdir("bin-int/" ..outputdir.. "/%{prj.name}")

	files{
		"%{prj.name}/**.h",
		"%{prj.name}/**.cpp",
		"%{prj.name}/backends/**.cpp",
		"%{prj.name}/backends/**.h"
	}

	includedirs{
		"%{prj.name}",
		"GLFW/include"
	}

	filter "system:windows"
		cppdialect "C++17"
		staticruntime "On"
		systemversion "latest"

	filter "configurations:Debug"
		defines "GL_DEBUG"
		symbols "On"

	filter "configurations:Release"
		defines "GL_RELEASE"
		symbols "On"

project "OpenGLInitial"
	location "OpenGLInitial"
	kind "ConsoleApp"
	language "C++"

	targetdir("bin/" ..outputdir.. "/%{prj.name}")
    objdir ("bin-int/" ..outputdir.. "/%{prj.name}")

	files{
		"%{prj.name}/src/**.cpp"
	}

	includedirs{
		"GLAD/include",
		"GLFW/include",
		"ImGUI",
		"ImGUI/backends"
	}

	links{
		"GLAD",                                        //链接所需要的动态库或者是静态库
		"GLFW",
		"ImGUI"
	}

	filter "system:windows"
        cppdialect "C++17"
        staticruntime "On"
        systemversion "latest"

	filter "configurations:Debug"
		defines "GL_DEBUG"
		symbols "On"

	filter "configurations:Release"
		defines "GL_RELEASE"
		symbols "On"

在具体介绍这个脚本之前,先双击GenerateProject.bat生成项目。注意,因为这当中需要启动命令行,项目的文件路径不能有中文

2、premake脚本介绍

workspace "OpenGLInitial"    //对应的解决方案的名称
	architecture "x86_64"    //程序采用的架构

	configurations{          //配置管理器
		"Debug",             
		"Release"
	}

project "GLAD"            //项目的名称
	location "GLAD"       //指定文件的路径
	kind "StaticLib"      //输出形式   (这里是静态库)
	language "C++"        //编码语言

 项目名称

 

指定项目文件路径

使用的语言和输出的形式 

outputdir = "%{cfg.buildcfg}-%{cfg.system}-%{cfg.architecture}" //定义变量

//%{cfg.buildcfg} 当前配置管理模式
//%{cfg.system}  计算机当前使用的系统
//%{cfg.architecture} 程序的架构
targetdir("bin/" ..outputdir.. "/%{prj.name}")        //输出文件的路径
objdir ("bin-int/" ..outputdir.. "/%{prj.name}")  //中间文件输出路径

项目当中需要包含哪些文件,注意这些文件需要存放在项目文件夹当中,premake是不会自动去生成这些文件的

files{
		"%{prj.name}/include/**.h",                       //项目当中需要包含的文件
		"%{prj.name}/src/**.c"                           
	}

 

附加包含目录 

includedirs{                                          //附加应用路径
		"%{prj.name}/include"
	}

指定使用系统,C++版本,是否支持多线程

filter "system:windows"                               //使用系统
		cppdialect "C++17"                                //C++版本
		staticruntime "On"                                //是否支持多线程
		systemversion "latest"                            //系统版本

 预定义宏

defines{
        "_GLFW_WIN32",
        "_CRT_SECURE_NO_WARNINGS"
    }

链接库

links{
		"GLAD",                                        //链接所需要的动态库或者是静态库
		"GLFW",
		"ImGUI"
	}

到这里是对premake脚本的一些简单介绍,脚本当中的项目名称,指定文件,都可以根据自己需要进行修改,然后重新生成项目即可。如果有的读者没有vs2022不需要强迫自己去下载,只需要将GenerateProject.bat脚本中的 vs2022 改成自己有的VS版本就可以了

CALL depens\premake\premake5.exe vs2022
PAUSE

自动部署完毕,点击运行看一下结果如何,将控制台项目设置为启动项。

如果想要了解跟多premake脚本语法,请查看官方的维基百科。

总结

        虽然使用premake比直接去进行项目配置更加的复杂,但是它省去了我们需要重复配置项目的工作,让整个项目变得更加容易管理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值