1

我有一个简单的控制台应用程序项目,用于在某些 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 属性集 - 一个适用于所有系统

libdirs {
"/opt/local/lib",
"/System/Libarary/Frameworks",
"/Library/Frameworks",
"/usr/lib",
"/usr/local/lib" }

到 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。它应该能够添加多个目录。

如何启用这样的东西?

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

newoption {
trigger = "libsPath",
value = "PATH",
description = "Choose a particular directory for general libs search"
}
if not _OPTIONS["libsPath"] then
_OPTIONS["libsPath"] = NULL
end

libdirs {
"/opt/local/lib",
"/System/Libarary/Frameworks",
"/Library/Frameworks",
"/usr/lib",
"/usr/local/lib",
_OPTIONS["libsPath"]
}

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

4

2 回答 2

5

你不需要这个位:

if not _OPTIONS["libsPath"] then
   _OPTIONS["libsPath"] = NULL
end

如果未设置,它将已经是 nil(相当于 Lua 中的 NULL)。否则,这看起来不错,对我来说效果很好。

您可能会做出的一项改进是:将参数转换为接受分隔的路径列表,以便您的用户可以在必要时提供多个路径。因此,如果您像这样使用分号分隔的路径调用脚本:

C:\> premake4 /libsPath=C:\Code\Libs;C:\Code\MoreLibs vs2010

您可以将它添加到您的库搜索路径中,如下所示:

-- Split it up
libdirs { string.explode(_OPTIONS["libsPath"], ";") }

未经测试,但应该可以工作。希望有帮助!

于 2011-03-11T13:29:07.397 回答
0

当您希望用户能够指定包含或库目录时,最简单的方法之一是使用环境变量。当您的脚本运行时,它们可以查找名为EXTRA_LIB_PATHSand的环境变量EXTRA_INCLUDE_PATHS(或您想要调用的任何名称)并将那里列出的路径添加到您提到的预定义路径列表中。

Windows、Linux 和 OSX 都有环境变量的概念,但它们不使用完全相同的格式。Windows 环境变量中的目录路径列表通常由分号分隔,而 Linux 通常使用冒号。您需要确保解析环境变量的代码可以检测到当前平台并使用适当的方法来提取数据。

另一种可能性是将目录路径作为命令行选项传递给您的 premake 脚本(使用类似的语法premake.lua -L/path/to/lib -I/my/include/path -L/another/lib/path等)。这里的缺点是命令行可能会变得相当长,并且某些控制台可能对 CLI 命令的长度有限制。如果您将使用多个额外路径,我建议您在 CLI 参数上使用环境变量。

于 2011-03-08T19:02:02.090 回答