首页 > 编程语言 >【小沐学C++】C++ 基于Premake构建工程项目(使用)

【小沐学C++】C++ 基于Premake构建工程项目(使用)

时间:2023-12-10 16:04:58浏览次数:36  
标签:target Premake -- cfg C++ project 小沐学 Studio file

1、简介

Premake是一个命令行实用程序,它读取软件项目的脚本定义,最常见的是使用它为Visual Studio,Xcode或GNU Make等工具集生成项目文件。

2、使用

2.1 支持的工程文件Project Files

Action Description
vs2022 Generate Visual Studio 2022 project files
vs2019 Generate Visual Studio 2019 project files
vs2017 Generate Visual Studio 2017 project files
vs2015 Generate Visual Studio 2015 project files
vs2013 Generate Visual Studio 2013 project files
vs2012 Generate Visual Studio 2012 project files
vs2010 Generate Visual Studio 2010 project files
vs2008 Generate Visual Studio 2008 project files
vs2005 Generate Visual Studio 2005 project files
gmake Generate GNU Makefiles (This generator is deprecated by gmake2)
gmake2 Generate GNU Makefiles (including Cygwin and MinGW)
xcode4 XCode projects
codelite CodeLite projects

若要生成 Visual Studio 2013 项目文件,请使用以下命令:

premake5 vs2013

2.2 构建设置Build Settings

设置名称 设置标志
指定二进制类型(可执行文件、库) kind
指定源代码文件 files, removefiles
定义编译器或预处理器符号 defines
找到包含文件 includedirs
设置预编译标头 pchheader, pchsource
链接库、框架或其他项目 links, libdirs
启用调试信息 symbols
针对尺寸或速度进行优化 optimize
添加任意构建标志 buildoptions, linkoptions
设置已编译目标的名称或位置 targetname, targetdir
defines { "DEBUG", "TRACE" }
defines { "CALLSPEC=__dllexport" }
includedirs { "../lua/include", "../zlib" }
includedirs { "../includes/**" }
pchheader "myproject.h"
optimize "Speed"
filter { "system:linux", "action:gmake" }
  buildoptions { "`wx-config --cxxflags`", "-ansi", "-pedantic" }
targetname "mytarget"

2.3 链接Linking

(1)链接到外部库是通过links 功能完成的。

links { "png", "zlib" }

(2)links 指令的位置在project 下面设置。

workspace "MyWorkspace"

   project "MyLibraryProject"
      -- ...project settings here...

   project "MyExecutableProject"
      -- ...project settings here...
      links { "MyLibraryProject" }

(3)而查找库,则使用如下指令。

libdirs { "libs", "../mylibs" }
# or
libdirs { os.findlib("X11") }

2.4 配置Configurations

配置是要应用于构建的设置集合,包括标志和开关、头文件和库搜索目录等。每个工作区定义自己的配置名称列表;大多数 IDE 提供的默认值是“调试”和“发布”。

workspace "MyWorkspace"
   configurations { "Debug", "Release" }
workspace "MyWorkspace"
   configurations { "Debug", "DebugDLL", "Release", "ReleaseDLL" }
workspace "MyWorkspace"
   configurations { "Froobniz", "Fozbat", "Cthulhu" }
workspace "HelloWorld"
   configurations { "Debug", "Release" }

   filter "configurations:Debug"
      defines { "DEBUG" }
      flags { "Symbols" }

   filter "configurations:Release"
      defines { "NDEBUG" }
      optimize "On"

2.5 平台Platforms

“平台”在这里有点用词不当;我再次遵循Visual Studio命名法。实际上,平台只是另一组构建配置名称,提供了另一个方向用于配置项目。

configurations { "Debug", "Release" }
platforms { "Win32", "Win64", "Xbox360" }
configurations { "Debug", "Release" }
platforms { "Win32", "Win64", "Xbox360" }

filter { "platforms:Win32" }
    system "Windows"
    architecture "x86"

filter { "platforms:Win64" }
    system "Windows"
    architecture "x86_64"

filter { "platforms:Xbox360" }
    system "Xbox360"
configurations { "Debug", "Release" }
platforms { "Static", "DLL" }

filter { "platforms:Static" }
    kind "StaticLib"

filter { "platforms:DLL" }
    kind "SharedLib"
    defines { "DLL_EXPORTS" }

2.6 过滤Filters

project "MyProject"

  filter { "configurations:Debug" }
    targetdir "bin/debug"

  filter { "configurations:Release" }
    targetdir "bin/release"

2.7 预设值Tokens

wks.name
wks.location -- (location where the workspace/solution is written, not the premake-wks.lua file)

prj.name
prj.location -- (location where the project is written, not the premake-prj.lua file)
prj.language
prj.group

cfg.longname
cfg.shortname
cfg.kind
cfg.architecture
cfg.platform
cfg.system
cfg.buildcfg
cfg.buildtarget -- (see [target], below)
cfg.linktarget -- (see [target], below)
cfg.objdir

file.path
file.abspath
file.relpath
file.directory
file.reldirectory
file.name
file.basename -- (file part without extension)
file.extension -- (including '.'; eg ".cpp")

-- These values are available on build and link targets
-- Replace [target] with one of "cfg.buildtarget" or "cfg.linktarget"
--   Eg: %{cfg.buildtarget.abspath}
[target].abspath
[target].relpath
[target].directory
[target].name
[target].basename -- (file part without extension)
[target].extension -- (including '.'; eg ".cpp")
[target].bundlename
[target].bundlepath
[target].prefix
[target].suffix

结语

如果您觉得该方法或代码有一点点用处,可以给作者点个赞,或打赏杯咖啡;╮( ̄▽ ̄)╭ 如果您感觉方法或代码不咋地//(ㄒoㄒ)//,就在评论处留言,作者继续改进;o_O??? 如果您需要相关功能的代码定制化开发,可以留言私信作者;(✿◡‿◡) 感谢各位大佬童鞋们的支持!( ´ ▽´ )ノ ( ´ ▽´)っ!!!

标签:target,Premake,--,cfg,C++,project,小沐学,Studio,file
From: https://blog.51cto.com/fish/8761069

相关文章

  • 无涯教程-MFC - VC++项目
    VisualStudio包括几种VisualC++项目模板,这些模板有助于创建基本程序结构,菜单,工具栏,图标,并包含适合您要创建的项目类型的语句。在MFC中,您可以使用以下项目模板。Sr.No.Remark1MFCApplicationMFC应用程序是基于Microsoft基础类(MFC)库的Windows可执行应用程序,创建MF......
  • C++基础 -2- 命名空间
    ———————命名空间——————— ......
  • C++ Qt开发:使用顺序容器类
    当我们谈论编程中的数据结构时,顺序容器是不可忽视的一个重要概念。顺序容器是一种能够按照元素添加的顺序来存储和检索数据的数据结构。它们提供了简单而直观的方式来组织和管理数据,为程序员提供了灵活性和性能的平衡。Qt中提供了丰富的容器类,用于方便地管理和操作数据。这些容......
  • C++&MC空洞骑士
    #include<iostream>#include"minecraft.h"usingnamespacestd;intmain(intargc,char**argv){ TxMinecraftmc; boolcon=mc.ConnectMinecraft("zk.makeblock.net.cn","a9d44e758f6e4cf8b2da2624156f24d3");if(!con){......
  • C++程序基础
    1.程序运行过程及内存分布(1)程序运行过程我们使用指定c++编译器(windows环境下的vs编译器为例)写完一段代码后,通过编译生成.exe文件(我们需要的可执行文件),那编译过程又是怎样的呢?如果是在linux环境下编程,这个过程就比较明朗,需要我们自己手动编写makefile,里面关于编......
  • C++学习笔记三:变量与数据类型(浮点型)
    1.数据类型与所占内存大小类型大小精度注意float47 double815默认longdouble16>double 精度就是有效数字 2.声明和初始化floatnumber1{1.12345678901234567890f};//Precision:7doublenumber2{1.12345678901234567890};......
  • 候捷c++学习
    浅拷贝: 如图所示a指向Hello,b指向World,直接进行b=a的赋值操作,导致b和a指向同一块地方,那么b原来指向的World就会发生内存泄漏,且由于a和b指向同一块地方,改变a也会影响b深拷贝: a指向He,b指向World,想要把b深拷贝给a,分三步走:1、 清空a原来指向的内存空间 2、开辟和b同样大......
  • Effective C++笔记总结
    1、示C++为一个语言联邦C++是个多重范型编程语言(multiparadigmprogramminglanguage),一个同时支持过程形式(procedural)、面向对象形式(object-oriented)、函数形式(functional)、泛型形式(generic)、元编程形式(metaprogramming)的语言。2、尽量以const,enum,inline替换#define宏定义的变......
  • C++学习笔记二:变量与数据类型(整型)
    1.int(整型数据):1.1进制的表示:十进制,八进制,16进制,二进制intnumber1=15;//Decimalintnumber2=017;//Octalintnumber3=0x0F;//Hexadecimalintnumber4=0b00001111;//Binary上面几种表示方式都表示15这个数字,用cout输出得到相同的结果 1.2......
  • C++学习笔记一:windows系统配置C++开发环境(VS code+g++/clang++)
    1.下载vscode官网下载地址:https://code.visualstudio.com/安装时选择把软件加入到环境变量中这个选项 2.打开vscode,安装c/c++扩展插件 3.下载gcc和clang编译器下载地址:https://winlibs.com/下载后解压,把bin文件夹所在的路径加入到环境变量中加环境变量的方法:在程序......