使用premake帮助生成Visual Studio解决方案

2023-05-16

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 <stdio.h>

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脚本

  • 假设解决方案名称为MySolution,其中有两个项目,第一个MyProject1 是生成动态链接库供第二个项目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" -- DLL
    language "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版本可以自己选择
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用premake帮助生成Visual Studio解决方案 的相关文章

  • excel取消多行隐藏

    同时取消多行隐藏 xff0c 需要选中隐藏行的上一行和下一行 xff0c 然后右键点击取消隐藏行
  • 双面打印说明

    长边翻页表示以A4纸较长的边翻页 xff0c 类似A4纸张大小的书本的翻页 xff0c 短边翻页则是以较短的边翻页 xff1b 长边翻页是从右往左翻页 xff0c 短边翻页是从下往上翻页 xff0c 翻页后文字观看方向不同 xff1b 长边
  • Segment routing分段路由

    为了解决传统IP转发和MPLS转发的问题 xff0c 业界提出了SR xff08 segment routing xff0c 分段路由 xff09 SR的转发机制有很大改进 xff0c 主要体现在以下几个方面 1 基于现有协议进行扩展 xf
  • mount: RPC: Unable to receive; errno = No route to host

    环境 xff1a gec2440开发板 VMware8 0 43 Ubuntu10 04 uboot xff0c kernel xff0c rootfs都是之前做好的 xff0c 调试驱动都反复用过很多次 今天只是搬了台电脑 xff0c 换
  • 实现Charles+Postern抓包

    实现Charles 43 Postern抓包 在实际抓手机App包场景中 有很多种方案 经典的就是Fiddler 但是Fiddler会有一个问题 如果App设置了不走代理这个选项 那Fiddler就不行了 xff0c 比如说大众点评 xff
  • STM32学习—systick系统定时器

    SysTick定时器配置步骤 SysTick定时器的操作可以分为 4 步 xff1a xff08 1 xff09 设置SysTick定时器的时钟源 xff08 2 xff09 设置SysTick定时器的重装初始值 xff08 如果要使用中断
  • Mac 关闭设置系统升级红点

    关闭系统更新提醒红点 xff1a 在终端输入 xff1a defaults write com apple systempreferences AttentionPrefBundleIDs 0 killall dock
  • 图像特征提取算法之Haar特征原理(一)

    文章目录 笔记截图问题积分图例子结论 笔记截图 用白色的特征值之和 黑色的特征值之和 61 这一个区域的特征值 你也可以理解为用卷积进行提取 xff0c 白色的区域为1 黑色的为 1 xff08 邪恶的黑色 xff09 然后进行相加既可以得
  • CAS方式实现单点登录

    单点登录 xff0c 英文是 Single Sign On xff0c 缩写为 SSO 多个站点 192 168 1 20X 共用一台认证授权服务器 192 168 1 110 xff0c 用户数据库和认证授权模块共用 用户经由其中任何一个
  • 双系统重装Ubuntu经验分享

    真的很喜欢ubuntu 但又没有恒心把它学通透 xff0c 毕竟不是相关专业 第一次重装是因为没多少经验 xff0c 安装qqforlinux的时候多了两个东西 xff0c 还自己生成了快捷方式 xff0c 就想点开看看是啥 xff0c 结
  • PCL三维点云拼接融合

    1 PCL三维点云拼接融合技术 2 PCL系列 拼接两个点云
  • ubuntu20版本忘记或重置密码的问题

    前段时间把ubuntu密码忘了 xff0c 进不去并且有些需要密码权限的功能也用不了 xff0c 在网上搜了一大堆 xff0c 都是什么从开始就摁shift或Esc xff0c 好家伙摁烂了也不行啊 解决如下 xff1a 首先 xff0c
  • 程序员申请加班调休被HR拒绝:996是行规,不想加班就滚?

    现如今 xff0c 很多公司为了不给员工加班费 xff0c 一般都会允许他们进行调休 也就是你加班了多少个小时 xff0c 等项目不忙的时候 xff0c 你们可以选择多休息几天 公司的这种做法 xff0c 大多数员工还是能接受的 xff0c
  • 博士生如何进行文献阅读和文献整理?

    一 阅读文献之前 先了解写文章的规则 SCI的架构 TITLE ABSTRACT main message INTRODUCTION why did you do this job METHODS how did you do it RES
  • 结构体之offsetof宏详细解析

    1 define offsetof TYPE MEMBER size t amp TYPE 0 gt MEMBER include linux stddef h 1 1 功能 xff1a 返回结构体TYPE中MEMBER成员相对于结构体首地
  • 解决curl: (7) Failed to connect to raw.githubusercontent.com port 443

    解决办法 xff1a 一 首先查询域名 raw githubusercontent com对应的ip地址 去这网址查询 xff1a https tools ipip net domain php 二 修改hosts文件 linux系统一般都
  • 关于使用Maix Bit所遇到的OSError: Reset Failed问题

    一 问题 今天在使用Maix Bit学习的时候遇到了这样一个问题 xff0c 我使用Maixpy连接上了Maix Bit xff0c 然后进行下载程序的时候 xff0c 下载失败 xff0c 弹出来一个OSError Reset Faile
  • 致小白的K210模型训练与运用

    致小白的K210模型训练与运用 文章目录 致小白的K210模型训练与运用 前言一 模型训练方法二 详细介绍1 使用MixHub平台进行训练2 使用Mx yolov3自己搭建平台进行训练3 V3模型4 V4模型 前言 由于我也是刚接触K210
  • 使用APP inventor来制作一个属于自己的蓝牙串口软件

    使用APP inventor来制作一个属于自己的蓝牙串口软件 本文主要讲述蓝牙的发送和接收功能的制作 一 准备 1 APPinventor的网址 xff1a http app gzjkw net 二 蓝牙APP界面的设置 首先我们新建一个项
  • 一起卷吧,arduino/mixly语音识别模块,10元,可以自定义,提供自制的mixly库

    一 效果演示 制作的语音风扇演示一起卷吧 xff01 语音识别 xff0c 10元 xff0c 串口通信 xff0c arduino可用 xff0c 提供自制的mixly库 操作简单 xff0c 可以语音播报 哔哩哔哩 bilibili 制

随机推荐

  • arduino/mixly红外发射接收模块

    一 资料 http 资料链接 xff1a https pan baidu com s 1idRcrVCxQ5zWLh59EFpi9g 提取码 xff1a n8ud 默认波特率9600 串口通信 xff0c 可以发送也可以接收 发送格式 二
  • openmv学习十三:特征点匹配

    适用于匹配多角度的物体 xff0c 需要现场提取之后才能使用 http docs openmv io library omv image html http docs openmv io library omv image html cla
  • arduino/Mixly使用TCS230颜色识别传感器

    一 器材 TCS230 arduino uno 二 接线 TCS230arduino unoGNDGNDVCC5VS0D2S1D3S2D4S3D5OE LEDD6OUTD7 三 程序 mixly程序 arduino程序 define tcs
  • arduino/Mixly心知天气

    一 准备 首先百度一下心知天气 xff0c 获取一下密钥 xff0c 具体的可以看这一篇Blynk中WebHook组件的使用方法 moshanghuaw的博客 CSDN博客 然后再准备一个esp8266或者esp32都可以 二 程序 mix
  • C For Linux之内存访问-内存简介

    1 内存 1 1 计算机为什么需要内存 存储器是计算机系统中非常重要的组成部分 计算机中的存储器分为两类 xff1a 内存储器的外存储器 xff08 也叫辅助存储器 xff09 所谓外存储器在PC机中一般指硬盘 U盘 光盘等 xff0c 而
  • 每天一分钟玩转golang:基础类型之字符串(四)

    大家好 xff0c 我是加摩斯 xff0c 觉得文章有帮助的小伙伴 xff0c 记得一键三连哟 xff5e 申明 xff1a 本系列两天更新一篇 xff0c 纯原创 xff0c 转载前请与我沟通 字符串类型也是一种基本类型 xff0c 底层
  • 项目二:电子骰子

    项目二 xff1a 电子骰子 文章目录 项目二 xff1a 电子骰子一 导入 5分钟 xff09 学习目的 二 新授 65分钟 1 预展示结果 5分钟 2 本节课所用的软硬件 5分钟 3 硬件介绍 1分钟 4 图形化块介绍 1分钟 5 单个
  • 项目三:双人骰子

    项目三 xff1a 双人骰子 文章目录 项目三 xff1a 双人骰子一 导入 5分钟 xff09 学习目的 二 新授 65分钟 1 预展示结果 5分钟 2 本节课所用的软硬件 5分钟 3 硬件介绍 1分钟 4 图形化块介绍 1分钟 5 单个
  • 项目四:无极调光台灯

    项目四 xff1a 无极调光台灯 文章目录 项目四 xff1a 无极调光台灯一 导入 5分钟 xff09 学习目的 二 新授 65分钟 1 预展示结果 5分钟 2 本节课所用的软硬件 5分钟 3 硬件介绍 5分钟 4 图形化块介绍 10分钟
  • Windows10安装anaconda之后pip3不能使用

    1 在命令行中切换到你自己的anaconda环境中 xff0c 2 在命令行中 xff0c 切换到你的anaconda环境中的Scripts目录中像我是在 xff1a D software anaconda3 az envs py3 pyt
  • UE4蓝图通信-蓝图接口

    蓝图接口 除了最常用的cast to蓝图节点可以实现通信以外 xff0c 进阶的通信方式就是蓝图接口 目的 xff1a 与多个对象中的特定几个对象进行通信方式 xff1a 对检测到的对象发送消息消息 xff1a 发出的消息是接口消息 xff
  • UE4蓝图通信-事件分发器(Event Dispatcher)

    事件分发器在蓝图编辑器的我的蓝图选项卡中创建 在我的蓝图 xff08 My Blueprint xff09 面板中的 进行创建输入事件分发器的名称 xff0c 该字段显示在 我的蓝图 xff08 My Blueprint xff09 选项卡
  • UE4项目优化(帧数优化)相关知识

    控制台命令 r screenpercentage 0 100 0是百分之百 如果改了这个 游戏运行超级流畅说明瓶颈在GPU上stat fps 显示帧率 Frame Per Second 或者快捷键Crlt 43 Shift 43 H 显示帧
  • 计算机图形学【GAMES-101】2、光栅化(反走样、傅里叶变换、卷积)

    快速跳转 xff1a 1 矩阵变换原理Transform 旋转 位移 缩放 正交投影 透视投影 2 光栅化 反走样 傅里叶变换 卷积 3 着色计算 深度缓存 着色模型 着色频率 4 纹理映射 重心坐标插值 透视投影矫正 双线性插值MipMa
  • 计算机图形学【GAMES-101】10、材质(BRDF)(折射、菲涅尔项、微表面模型、各向异性材质)

    快速跳转 xff1a 1 矩阵变换原理Transform 旋转 位移 缩放 正交投影 透视投影 2 光栅化 反走样 傅里叶变换 卷积 3 着色计算 深度缓存 着色模型 着色频率 4 纹理映射 重心坐标插值 透视投影矫正 双线性插值MipMa
  • 【重心坐标插值、透视矫正插值】原理以及用法见解(GAMES101深度测试部分讨论)

    文章目录 1 Barycentric Coordinates xff08 重心坐标 xff09 1 1 重心坐标概念1 2 重心坐标计算方式1 3 重心坐标插值 2 重心坐标计算公式推导3 透视投影插值矫正3 1 透视矫正后的 96 深度插
  • gcc之inline函数探究

    1 引子 xff1a 内联函数 xff08 以下称为inline函数 xff09 的行为类似于宏 xff0c 但是会像函数一样进行参数的静态类型检查 因此gcc中很多地方倾向于使用inline函数来替代宏 但是inline函数在gcc中应该
  • Visual Studio中多个源文件、多个main()函数如何分开运行

    对于跟网课的小伙伴 xff0c 有些初学者可能像我以前一样 xff0c 想记录每一课的代码 xff0c 会一节课一个 sln解决方案 xff0c 这样非常不方便 如果一个 cpp放一个main函数 xff0c 再F5运行肯定报错咯 xff0
  • C++中的变参宏 #define MyMacro(...)(__VA_ARGS__)

    span class token macro property span class token directive hash span span class token directive keyword define span span
  • 使用premake帮助生成Visual Studio解决方案

    Premake xff1a https github com premake premake core Premake 是一个基于 Lua 脚本语言的构建系统工具 xff0c 用于生成项目文件和构建脚本 xff0c 能够帮助开发者快速创建和