对于我的C++构建过程,我使用的是Bakefile,一个很好的小Makefile生成器,它允许您用XML指定构建目标,并且可以从中生成各种Makefile或项目文件.它工作正常,我用它来生成GNU autotools脚本.
现在我听说过Premake,它看起来有类似的功能.您在Lua中指定目标,并相应地生成Makefile.
有谁知道Bakefile和Premake之间的区别?有没有人有这方面的经验?Premake似乎更近期,并且更积极的发展?
XML解析器ticpp使用Premake,但它要求您在构建ticpp之前下载premake.他们不能只为各种系统预生成Makefile,这样您就不必先下载并安装premake了吗?
注意:我知道有关各种最佳构建工具的SO线程,通常答案是CMake,SCons或Jam.但是,我对用户在构建项目之前不必下载的内容感兴趣.
我目前正在尝试学习如何使用premake 4将其应用于OpenGL sdk.我目前正在尝试使用main方法构建一个构建2个项目的Visual Studio 2010解决方案,一个是静态库,另一个包含单个主源文件.
这个项目非常简单,仅用于学习预制.在名为Test的静态库项目中,我有2个文件,Test.h和Test.cpp.Test.h包含方法print()的原型.print()只是在控制台上打印一行.使用premake,我将静态库链接到Main项目,而在main.cpp中我已经包含了Test.h文件.我的问题是:在VS2010中,当我尝试构建时出现此错误:
1>main.obj : error LNK2019: unresolved external symbol "void __cdecl print(void)" (? print@@YAXXZ) referenced in function _main 1>.\Main.exe : fatal error LNK1120: 1 unresolved externals
这是我在4个文件中的代码,premake4.lua:
solution "HelloWorld"
configurations {"Debug", "Release"}
project "Main"
kind "ConsoleApp"
language "C++"
files{
"main.cpp"
}
configuration "Debug"
defines { "DEBUG" }
flags { "Symbols" }
configuration "Release"
defines { "NDEBUG" }
flags { "Optimize" }
links {"Test"}
project "Test"
kind "StaticLib"
language "C++"
files{
"test.h",
"test.cpp"
} …
Run Code Online (Sandbox Code Playgroud) 我希望 Visual Studio 自动检测着色器文件的更改并运行 glslangValidator 作为构建步骤,而不是手动将 GLSL 着色器编译为 SPIR-V。我正在使用 Premake 生成 Visual Studio 解决方案/项目。
一种部分有效的解决方案是在 中声明premake5.lua
:
--prebuildcommands [[for %%i in (..\data\shaders\*) do (..\libs\vulkan\glslangValidator.exe -V -o "%%~dpibin\%%~nxi.spv" %%i)]]
Run Code Online (Sandbox Code Playgroud)
然后right-click shader in solution explorer -> properties -> General -> Item Type -> Custom Build Tool
。
这种方法有一些缺点:
我在 premake 文档中找到的最接近的东西是:Custom Build Commands。我认为这个想法是在着色器文件上使用过滤器并生成构建命令,但我无法获得任何工作。也许其他人有想法?
我现在正在看PreMake/CMake.但是,我没有看到如何在整个跨平台构建工作流程中使用它.实际上,它会生成makefile(或解决方案).那么,您如何在每个目标平台上实际构建这些解决方案?您是否必须为每个目标维护一个构建脚本(如.sh或.bat文件)?这首先会破坏使用premake/CMake等工具的目的.
指向使用premake从编码到最终构建产品的所有过程的教程链接将非常棒.
谢谢你的帮助.
我想在生成Makefile(gmake工具链)时使用clang构建我的应用程序.有没有办法做到这一点?
我是 Node9 的作者,Node9 是一个托管的混合操作系统,它结合了 Inferno 和 LuaJIT,创建了一个交互式的分布式开发环境。请参阅此处的项目: https: //github.com/jvburnes/node9
我创建了一个基本的 4.x 预制脚本来编译 OSX 的所有依赖项和主要源代码,但现在人们要求 Linux、BSD 和 Windows 的构建配置。我有执行此操作的代码,并且我想创建预制配置以在这些操作系统上构建和运行 Node9。我需要设置库并包括搜索路径、编译器名称以及每个平台的定义。
我知道这有很多问题,但我想把这件事做好。
谢谢。
kind "SharedLib"
language "C++"
defines "DLL_EXPORT"
targetname "read_cad_file"
targetextension ".arx"
Run Code Online (Sandbox Code Playgroud)
我正在使用 objectARX 进行开发,我想使用premake5和vs2015编译我的项目。脚本中的一些设置如上。在此设置下,在属性->C/C++->代码生成->运行时库中,运行时库为Multithreaded Debug(/MTd)。我想问如何使用premake5将其更改为多线程DLL(/MD)?多谢:)
我是 premake5 的新用户,并试图了解如何在未来的项目中使用它。对于生成器,'gmake' 和 'gmake2' 有一个选项,它们似乎生成不同的 Makefile,但我不清楚究竟有什么区别。
我无法在 wiki 上找到很多关于它的信息,而且 gmake2 似乎并不只是 gmake 的一个新的改进版本。
最近在github 问题 #885上提出了类似的问题,但没有回应。谁能告诉我有什么区别,所以我会知道什么时候使用哪个?
在我们最初的解决方案中,我们的项目中有过滤器,允许我们对文件进行排序:“源文件”、“头文件”等。
我想用premake 5重现这种行为。我可以创建用于对项目进行排序的过滤器group "..."
,但无法在项目内执行相同的任务。
有任何想法吗?
我使用premake4.exe实用程序为不同的平台生成项目文件.问题是我找不到如何在lua-config文件中指定自定义应用程序入口点.
我应该使用哪个选项?例如,在Visual Studio中我可以去
Project Properties->Linker->Advanced
Entry Point = name_of_my_entry_point_function
Run Code Online (Sandbox Code Playgroud)
在premake4手册(http://industriousone.com/flags)中,我发现只有WinMain()标志将WinMain函数确定为应用程序入口点,但我需要自定义入口点,例如像wmain().
我正在尝试使用 premake 5 构建一个简单的项目。在 win10 上使用 Visual Studio 2019。Premake 对我来说是新的,但我开始很简单:唯一的依赖项是 glm (仅标头库)、GLAD 和 GLFW。我将 GLAD 和 GLFW 作为子项目包含在我的预制文件中。项目生成进展顺利。
glm 已正确包含并可用。
构建时:GLAD 和 GLFW 正确构建到各自的 .lib 文件,但“核心”应用程序失败并出现以下链接器错误:
3>GLFW.lib(init.obj) : error LNK2019: unresolved external symbol _glfwSelectPlatform referenced in function glfwInit
3>GLFW.lib(vulkan.obj) : error LNK2019: unresolved external symbol _glfwPlatformLoadModule referenced in function _glfwInitVulkan
3>GLFW.lib(vulkan.obj) : error LNK2019: unresolved external symbol _glfwPlatformFreeModule referenced in function _glfwInitVulkan
3>GLFW.lib(vulkan.obj) : error LNK2019: unresolved external symbol _glfwPlatformGetModuleSymbol referenced in function _glfwInitVulkan
Run Code Online (Sandbox Code Playgroud)
我在构建 glfw 时一定缺少配置选项
这是负责构建 GLFW 的 …
在premake我们有同样的结构 files { "**.h", "**.cpp" }
将files = { "**.h", "**.cpp" }
是一回事吗?