首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Premake项目构建/配置脚本:如何让用户使用libs (libdirs)和include (includedirs)将自己的路径添加到路径数组中?

问Premake项目构建/配置脚本:如何让用户使用libs (libdirs)和include (includedirs)将自己的路径添加到路径数组中?
EN

Stack Overflow用户
提问于 2011-03-09 02:32:00
回答 2查看 2.3K关注 0票数 0

我有一个简单的控制台应用程序项目直播视频流使用跨平台库在一些TCP服务器上。我手动将其从Windows移植到Linux和Mac。因此,现在我有3个项目使用相同的代码,每个项目都是手动创建和测试的。现在,我正在尝试创建一个premake lua项目创建文件,以自动更新项目文件的过程。

我开始创建一个lua文件

在我的premake lua构建文件中有一个lib链接数组,我的项目需要一个lib链接数组。

它们中有些是重复的,有些则不是(因为例如在Windows上有"openal32“(甚至在Windows764位版本上),在Linux上有更简单的名字"openal”,在Mac上有"OpenAL.framework“(这是mac上包含openAL的唯一选项))

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

代码语言:javascript
复制
libdirs {
"/opt/local/lib",
"/System/Libarary/Frameworks",
"/Library/Frameworks",
"/usr/lib",
"/usr/local/lib" }

链接到目录可能适用于Mac (因为我们使用默认安装到/opt/local/lib中的Mac Ports )和Linux (我们主要使用app-get模拟,自动安装到usr/lib中,有时也安装到/usr/local/lib中)。但是在windows上,你永远不会知道ffmpeg在哪里或者boost安装在哪里(可能每个程序员都有他自己的想法来保存windows Libs和头文件……)所以我们需要一个来自premake的简单的东西:

添加用户定义的库目录的操作,这些目录将包含在libdirs数组中,对于includedirs数组也是如此。它应该能够添加一个以上的目录。

如何启用这样的东西?

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

代码语言:javascript
复制
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上工作...怎么办?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-11 21:29:07

你不需要这一点:

代码语言:javascript
复制
if not _OPTIONS["libsPath"] then
   _OPTIONS["libsPath"] = NULL
end

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

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

代码语言:javascript
复制
C:\> premake4 /libsPath=C:\Code\Libs;C:\Code\MoreLibs vs2010

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

代码语言:javascript
复制
-- Split it up
libdirs { string.explode(_OPTIONS["libsPath"], ";") }

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

票数 4
EN

Stack Overflow用户

发布于 2011-03-09 03:02:02

当您希望用户能够指定include或library目录时,最简单的方法之一是使用环境变量。当您的脚本运行时,它们可以查找名为EXTRA_LIB_PATHS和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参数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5236733

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档