问题标签 [premake]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
4716 浏览

build-process - Makefile 生成器:premake vs bakefile?

对于我的 C++ 构建过程,我正在使用Bakefile,这是一个不错的小 Makefile 生成器,它允许您在 XML 中指定构建目标,并且可以从中生成各种 Makefile 或项目文件。它工作正常,我用它来生成 GNU autotools 脚本。

现在我听说了Premake,它似乎具有类似的功能。您在Lua中指定目标,它会相应地生成 Makefile。

有谁知道 Bakefile 和 Premake 之间的区别?有没有人有这两种经验?Premake 似乎更新更近,发展更积极?

XML 解析器ticpp使用 Premake,但它要求您在构建 ticpp 之前下载 premake。难道他们不能为各种系统预先生成 Makefile,这样您就不必先下载和安装 premake?

注意:我知道关于什么是最好的构建工具有各种 SO 线程,通常答案是CMakeSConsJam。但是,我对我的用户在构建我的项目之前不必下载的东西感兴趣。

0 投票
1 回答
1377 浏览

xcode - 链接函数时,OSX/Darwin 未解析符号

我正在将一个大型(~1M LOC)项目从 Window/Visual Studio 环境移植到其他平台,其中第一个平台恰好是 Mac OS X。

最初该项目被配置为 Visual Studio 解决方案和项目,但现在我正在使用(优秀的)Premake(http://industriousone.com/premake)为多个平台(VS、XCode、GMake)生成项目文件。

我配置、移植和构建了前几个项目,没有任何重大问题,但是在移植了数学库后,我遇到了这个我无法解决的奇怪链接错误:从 math.h 使用的任何函数都将无法链接(导致未解析的符号)。

作为参考,我使用 Premake v4.2.1 为 XCode v3.2.1 生成项目,该项目使用 gcc v4.2 构建 x86_64 架构。(所有这些都在 64 位 Snow Leopard 上)我试图通过添加 -isysroot /Developer/SDKs/MacOSX10.6.sdk -mmacosx-version-min=10.6 来说服 gcc 链接和构建针对“已知”SDK 的所有内容到构建命令行。

现在在正常情况下,添加 -lm 应该可以解决这个问题,但是在 Darwin 中,这些数学库包含在 libSystem 中,据我所知,它被 gcc/ld 隐式链接。

我尝试从 XCode 中创建一个虚拟项目,它只是运行:

正如预期的那样,这构建得很好。但是,如果我在 Premake 生成的项目中的代码中放入相同的内容,所有这些数学函数最终都无法解析。

现在将“本机”XCode 项目的链接命令与我生成的 XCode 项目进行比较,它们看起来非常相似(除了我生成的项目也链接了其他库)。

“原生”项目:

生成的项目:

任何有关如何进行的帮助或提示将不胜感激。是否有任何 gcc 标志或其他工具可以帮助我解决这个问题?

0 投票
1 回答
651 浏览

c++ - 使用递归依赖聚合构建系统

我最近开始使用跨平台构建系统(按需生成 make 文件、Visual Studio 解决方案/项目等)建立自己的库和项目,我遇到了一个可能已经解决的问题。

我遇到的问题是:当一个应用程序有一个依赖项也有依赖项时,被链接的应用程序必须链接依赖项及其所有子依赖项。这以递归方式进行,例如

(为了争论,假设我们只处理静态库。)

  • TopLevelApp.exe
    • 依赖关系_A
      • 依赖_A-1
      • 依赖_A-2
    • 依赖_B
      • 依赖_B-1
      • 依赖性_B-2

所以在这个例子中,TopLevelApp 将需要链接dependency_A、dependency_A-1、dependency_A-2 等,B 也是如此。我认为在目标应用程序中手动记住所有这些的责任是非常次优的。还有一个问题是确保所有目标都使用相同版本的依赖项(假设某些目标依赖于相同的东西,例如 boost)。

现在需要链接所有的库,并且没有办法绕过它。我正在寻找的是一个为你管理这个的构建系统。因此,您所要做的就是指定您依赖某些东西,并且该库的适当依赖项将自动被拉入。

我一直在研究的构建系统是 premake premake4,它不能处理这个问题(据我所知)。有谁知道可以处理此问题的构建系统?如果没有,那为什么不呢?

0 投票
2 回答
2306 浏览

cross-platform - Premake 项目构建/配置脚本:如何让用户将自己的路径添加到带有库(libdirs)和包含(includedirs)的路径数组中?

我有一个简单的控制台应用程序项目,用于在某些 TCP 服务器上使用跨平台库进行实时视频流传输。我将它从 Windows 手动移植到 Linux 和 Mac OS X。所以现在我有 3 个项目使用相同的代码,每个项目都是手动创建和测试的。现在我正在尝试创建一个预制的 lua 项目创建文件来自动化更新项目文件的过程。

我开始创建一个lua文件

我的预制 lua 构建文件中有一组 lib 链接我有我的项目所需的一组 lib 链接。

其中一些有点重复,有些则没有(例如,因为 Windows 上有“openal32”(甚至在 Windows 7 64 位版本上),Linux 上有更简单的名称“openal”,Mac OS X 上有“OpenAL.framework” (它是 mac os 上唯一包含 openAL 的选项)

我有一个 linkdirs 属性集 - 一个适用于所有系统

到 dirs 的链接可能适用于 Mac OS X(因为我们使用默认安装到 的 Mac 端口/opt/local/lib)和 Linux(我们主要使用自动安装到 的 app-get 类似物,usr/lib有时也安装到/usr/local/lib)。但是在 Windows 上,你永远不知道 ffmpeg 在哪里或在哪里安装了 boost(可能每个程序员都有自己的想法将 windows Libs 和 Headers 保存在哪里......)所以我们需要 premake 中的一个简单的东西:

添加用户定义的库目录的操作,该目录将包含在libdirs数组中,数组的内容相同includedirs。它应该能够添加多个目录。

如何启用这样的东西?

我试图创建一个“基于选项的系统”,例如

但它似乎不适用于 Windows ......我该怎么办?

0 投票
1 回答
310 浏览

lua - 面向 premake4 初学者的 Lua:'variable = {"a", "b"}' 与 'variable {"a", "b"}' 是一样的吗?

在预制中,我们有类似的构造 files { "**.h", "**.cpp" }files = { "**.h", "**.cpp" }

0 投票
2 回答
1202 浏览

c++ - Premake4:如何将 mac os x xcode C++ 项目设置为“仅构建活动配置”选项处于活动状态?

问题:当您没有指定该选项时,xcode 项目会尝试构建它所能做的一切(在我的情况下,不仅是 i386,而且还有一些我没有库的其他拱门,我不需要。)

当前解决方案 - 打开生成的 xcode 项目并在所有配置中设置该选项。

所需的解决方案 - 我需要在 premake 脚本中设置该选项。

问题 - 如何做如此渴望的事情?

0 投票
2 回答
3048 浏览

lua - 如何从预制构建脚本运行自定义工具?

我在我的 C++ 应用程序中使用协议缓冲区进行数据序列化。我想在我的premakeprotoc构建脚本中添加代码生成器的调用(从而确保生成的类的最新状态并避免需要在版本控制下存储生成的源代码)。

甚至他们的常见问题解答都有关于此的问答,但答案对我来说非常不完整。能够调用任何 lua 函数是很棒的,但是我到底应该在哪里调用呢?在构建应用程序或单元测试之前,我需要运行 protoc 编译器。

0 投票
1 回答
1887 浏览

lua - 如何在 *.lua 文件上使用 premake

我该如何使用premake4?我有一个.lua要编译的文件。

我下载了可执行文件premake4,但是当我运行./premake4 myfile它时出现错误。

0 投票
1 回答
926 浏览

visual-studio - OpenGL SDK 如何使用 Premake 创建新项目

我最近开始学习 OpenGL,开始使用 C++ 制作一些图形应用程序。我已经安装了 OpenGL SDK,并且能够在其上正确构建项目。但是,在 OpenGL SDK 站点上,几乎没有关于如何使用 SDK 的元素(例如 freeglut 等)创建新项目的信息。我有 Premake 4.0,我知道我必须对lua 文件,但是我不知道 lua 并且不确定如何使用 Lua 文件来创建新项目。那你能帮帮我吗?我使用VS2010,我应该创建项目,然后用premake做点什么吗?或者创建某种lua文件,然后使用premake?任何帮助都会很棒,因为我非常迷茫,并且真的很想开始使用 OpenGL。我对此进行了很多实验,

0 投票
1 回答
6545 浏览

c++ - 创建静态库并使用 premake 链接到它

我目前正在尝试学习如何使用 premake 4 以将其应用于 OpenGL sdk。我目前正在尝试制作一个构建 2 个项目的 Visual Studio 2010 解决方案,一个是静态库,另一个包含一个带有 main 方法的主源文件。

这个项目非常简单,完全是为了学习premake。在名为 Test 的静态库项目中,我有 2 个文件,Test.h 和 Test.cpp。Test.h 包含方法 print() 的原型。print() 只是在控制台打印一行。使用 premake,我将静态库链接到 Main 项目,并在 main.cpp 中包含了 Test.h 文件。我的问题是:在 VS2010 中,当我尝试构建时出现此错误:

这是我在 4 个文件 premake4.lua 中的代码:

测试.cpp:

测试.h:

主要.cpp:

如果您想知道为什么那里有一个 getch(),在我的计算机上,控制台一旦达到 return 0 就会立即关闭,所以我使用 getch() 来解决这个问题,这会强制窗口等待用户按下另一个键. 关于这个问题的任何建议都会很棒,因为我根本不确定问题是什么。如果它很简单,请不要阉割我,我对预制和静态库的经验很少,这就是我尝试学习它们的原因。