使用premake帮助生成VS解决方案
创始人
2025-06-01 02:45:19
0

Premake :https://github.com/premake/premake-core
Premake 是一个基于 Lua 脚本语言的构建系统工具,用于生成项目文件和构建脚本,能够帮助开发者快速创建和配置跨平台的项目。

使用 Premake,开发者可以通过编写简单的 Lua 脚本来描述项目的结构和构建选项,Premake 会根据这些脚本生成特定平台(如 Windows、Linux、Mac 等)的项目文件和构建脚本,例如 Visual Studio 的 .sln 文件、Makefile 或 Xcode 的 .xcodeproj 文件等。


下载最新的windows release版本,不需要自己编译
在这里插入图片描述
解压后,只需要其中的premake.exe文件,放在项目路径中


完整的使用教学可以参考wiki

  • tokens,列出了所有预定义的变量,供我们使用,用法类似于vs中项目设置里的宏(ProjectDir 、SolutionDir、ProjecName等等),不同的地方是vs中取值用$(),premake中用%{}

  • postbuildcommants,可以使用编译后命令来复制文件(如.dll)到.exe文件目录下

这是wiki的第一个premake使用示例

/* hello.c */
#include int main(void) {puts("Hello, world!");return 0;
}

在项目中创建一个文件 premake5.lua

workspace "HelloWorld"   -- 解决方案名称configurations { "Debug", "Release" }project "HelloWorld"kind "ConsoleApp"	-- 项目类型为可执行程序language "C"targetdir "bin/%{cfg.buildcfg}" -- 编译输出路径files { "**.h", "**.c" }		-- 所有子文件夹中的所有.h .c文件,递归抓取filter "configurations:Debug" -- 针对debug和release配置下的一些特定的设置defines { "DEBUG" }symbols "On"filter "configurations:Release"defines { "NDEBUG" }optimize "On"

稍微复杂点的使用(用于根据源代码生成VS的.sln),编写lua脚本

  • MyProject1 是生成一个dll供MyApp使用
workspace "MySolution"        -- 解决方案名称architecture "x64"   configurations{"Debug","Release",    "Dist"}
-- 输出路径变量:类似于 debug-windows-x64    
outputdir = "%{cfg.buildcfg}-%{cfg.system}-%{cfg.arcchitecture}"   project "MyProject1"         -- 项目名称location "MyProject1"kind "SharedLib" -- DLLlanguage "C++"targetdir ("bin/" .. outputdir .. "/%{prj.name}") -- lua的字符串拼接方式 ..objdir ("bin-int/" .. outputdir .. "/%{prj.name}")files                                   -- 包含项目下所有的.h .cpp文件{"%{prj.name}/src/**.h",    "%{prj.name}/src/**.cpp"}include{"%{prj.name}/3rd/glfw/include"}filter "system:windows" --对特定的系统(windows\OS..)、配置(Debug/Release)、平台(x64 x86)的项目属性cppdialect "C++17"  --C++特性版本staticruntime "On"  systemversion "10.0.22000.0"    -- windowsSKD版本defines{"PLATFORM_WINDOWS","BUILD_DLL"}postbuildcommands{-- 拷贝本项目的输出文件中的dll到指定文件夹中("{COPY} %{cfg.buildtarget.relpath} ../bin/" .. outputdir .. "/MyApp")}filter "configurations:Debug"defines "_DEBUG"symbols "On"filter "configurations:Release"defines "_RELEASE"optimize "On" filter "configurations:Dist"defines "_DIST"optimize "On"-- 可以过滤多个选项,一起配置-- filter {"system:windows", "configurations:Release"}--     buildoptions "/MT"project "MyApp"location "Sandbox"kind "ConsoleApp"language "C++"targetdir ("bin/" .. outputdir .. "/%{prj.name}")objdir ("bin-int/" .. outputdir .. "/%{prj.name}")files                                   -- 包含项目下所有的.h .cpp文件{"%{prj.name}/src/**.h",    "%{prj.name}/src/**.cpp"}include{"%{prj.name}/vendor/spdlog/include","MyProject1/src"}links        --链接项目{"MyProject1"}filter "system:windows" cppdialect "C++17" staticruntime "On"  systemversion "10.0.22000.0" defines{"PLATFORM_WINDOWS"}filter "configurations:Debug"defines "_DEBUG"symbols "On"filter "configurations:Release"defines "_RELEASE"optimize "On" filter "configurations:Dist"defines "_DIST"optimize "On"

之后在lua所在路径打开CMD,输入 call premake5.exe vs2022 即可。

  • premake5.exe如果不在同一路径下,则在前面加上它的相对路径如:call premake/premake.exe vs2022;
  • 目标vs版本可以自己选择

相关内容

热门资讯

夙夜匪懈造句   夙夜匪懈造句  1、他为了参加此次考试,半年来夙夜匪懈,拚命苦读,如今终于如愿以偿,人人称羡。 ...
亡羊补牢造句 亡羊补牢造句汇集  亡羊补牢,并非为了弥补以往的损失,而是为了减少或杜绝以后再发生类似的状况。下面是...
用一如既往怎么造句   一如既往解释:一:完全;既往:从前,已往。指态度没有变化,完全象从前一样。下面是小编为大家收集整...
师恩难忘 师恩难忘【教学要求】1.正确、流利、有感情地朗读课文。2.学会本课6个生字,理解由生字组成的词语。会...
变成了造句 变成了造句大全  造句,动词词语,是指用词语组织句子。今亦以指初等学校语文练习内容之一。下面是我整理...
“潋滟”造句 51、 侍女说着又笑了,一双眸子潋滟。52、 17K小说网提供星河潋滟曲最新章节在线阅读,每天更新星...
用生机勃勃造句 关于用生机勃勃造句  1. 春天是无私的,她每年来一次都会给大地带来生机,使大地变得生机勃勃,万物变...
俯冲的造句 俯冲的造句  1.德国在西西里岛的机场上,警报声骤然响起,战斗机飞行员和俯冲轰炸机飞行员从飞行预备室...
不拘一格的造句 不拘一格的造句不拘一格的造句1  1、以不拘一格强烈的电影独立性对社会与政治常具讽刺观点著称的阿特曼...
见解的同义词   导语:对此我是有自己独到的见解的。以下是小编为大家整理分享的见解的同义词,欢迎阅读参考。  见解...
怅然造句   怅然造句  1、有许多人无缘无故地兴高采烈或是怅然若失,她却未容有过这种感觉。  2、我们之间的...
“截然不同”造句 51、他是有话不说,她是锋芒毕露,两者截然不同。52、总在期待截然不同的一年能够时来运转,一反既往,...
滑模的解释及造句 滑模的解释及造句  滑模拼音  【注音】: hua mo  滑模解释  【意思】:滑动模板的简称,是...
接种的解释及造句 接种的解释及造句  接种拼音  【注音】: jie zhong  接种解释  【意思】:把疫苗注射到...
刚愎自用造句   刚愎自用造句  1、哪知我们老板是个刚愎自用的人,我们将利害关系说破嘴了,他还是我行我素。  2...
讽刺的词语解释及造句 讽刺的词语解释及造句  词目  讽刺  拼音  fěng cì  基本解释  用比喻、夸张等手法对人...
妄自菲薄造句 妄自菲薄造句9篇妄自菲薄造句1  1、当我们应对挑战时,既不宜妄自尊大,也不可妄自菲薄。  2、我们...
丘陵的解释及造句 丘陵的解释及造句  丘陵拼音  【注音】: qiu ling  丘陵解释  【意思】:连绵成片的小山...
“天会”造句 201、 我儿子保罗曾经对我说过,那个在青年队的14岁小正太总有一天会成为一个超顶级球员的。202、...
妻室的解释及造句 妻室的解释及造句  妻室拼音  【注音】: qi shi  妻室解释  【意思】:<书>妻子。  妻...