首页 > 其他分享 >Premake自动部署OpenGL项目

Premake自动部署OpenGL项目

时间:2024-09-15 12:22:56浏览次数:3  
标签:Premake name .. OpenGL 部署 premake C++ prj filter

        很多朋友们在构建项目的时候应该都使用过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比直接去进行项目配置更加的复杂,但是它省去了我们需要重复配置项目的工作,让整个项目变得更加容易管理。

标签:Premake,name,..,OpenGL,部署,premake,C++,prj,filter
From: https://blog.csdn.net/qq_45651072/article/details/142256632

相关文章

  • 通过脚本自动部署PostgreSQL数据库
    说明该脚本部署的pg数据库为源码通过编译安装的方式执行过程[root@olinux73_model~]#chmod+x./install.sh[root@olinux73_model~]#./install.sh####清理环境####关闭防火墙####关闭Selinuxsetenforce:SELinuxisdisabled####设置PG环境变量PGBASE=/u01/appFILE_CO......
  • k8s部署单机redis pod
     kind:ConfigMapapiVersion:v1metadata:name:redisnamespace:defaultlabels:app:redisdata:redis.conf:|-port6379bind0.0.0.0dir/dataappendonlyyesprotected-modenorequirepassredispidfile/data/red......
  • 深入理解FastAPI中的root_path:提升API部署灵活性的关键配置
    在Web开发领域,FastAPI因其高性能、易于使用和类型提示功能而备受开发者喜爱。然而,当涉及到在生产环境中部署FastAPI应用程序时,我们常常需要面对一些挑战,比如如何正确处理代理服务器添加的路径前缀。这时,root_path配置就变得至关重要。本文将深入探讨FastAPI中的root_path,并......
  • springboot社区网格化管理平台构建管理系统|【源码+论文+PPT+部署视频】
    我们提供多元化的技术项目服务,涵盖Java、PHP、Python等编程语言,以及前端开发、人工智能、大数据、单片机开发、ASP.NET、物联网等领域。我们还提供简历模板、面试题库和学习资料,帮助用户提升技术能力和就业竞争力。我们的服务内容包括:免费功能设计、任务书和开题报告撰写、......
  • AI大语言模型LLM学习-本地部署大语言模型(Ollama)
    系列文章1.AI大语言模型LLM学习-入门篇2.AI大语言模型LLM学习-Token及流式响应3.AI大语言模型LLM学习-WebAPI搭建4.AI大语言模型LLM学习-基于Vue3的AI问答页面5.AI大语言模型LLM学习-语义检索(RAG前导篇)6.AI大语言模型LLM学习-RAG技术及代码实现7.AI大语言模型LL......
  • 基于Python+数据可视化大屏+大数据爬虫的短视频内容理解与可视化推荐平台设计和实现(
    博主介绍:✌全网粉丝50W+,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、P......
  • Linux本地部署DbGate结合内网穿透工具实现无公网IP远程管理数据库
    文章目录前言1.安装Docker2.使用Docker拉取DbGate镜像3.创建并启动DbGate容器4.本地连接测试5.公网远程访问本地DbGate容器5.1内网穿透工具安装5.2创建远程连接公网地址5.3使用固定公网地址远程访问前言本文主要介绍如何在LinuxUbuntu系统中使用Docker部......
  • Linux+Docker:3分钟实现MinIO在线部署与Java集成
    Linux下使用Docker安装MinIO1.拉取MinIO镜像dockerpullminio/minio2.创建挂载目录mkdir-p/opt/minio/datamkdir-p/optl/minio/config3.检查端口占用sudolsof-i:9000...4.启动MinIO容器dockerrun--nameminio\#容器名称-p9010:9000......
  • Springboot防疫物资管理系统yx5k5--(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、研究背景与意义随着全球公共卫生事件的频发,防疫物资的有效管理成为保障社会安全与稳定的关键环节。传统的手工管理模式已难以满足大规模、高效......
  • Springboot二手物品交易系统03374--(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、研究背景随着互联网技术的飞速发展和人们消费观念的转变,二手物品交易逐渐成为一种流行的消费模式。传统的二手市场存在信息不对称、交易效率低......