我发现了一些关于在 C++ 应用程序中嵌入 Ruby 的问题。几乎所有投票最多的答案都建议使用 Lua。
鉴于我想到的一个项目会更好地使用 Rake 中已经表达的语法(它是一个规则引擎),是否有任何简单的方法可以将 Rake 嵌入到 C++ 应用程序中,或者是否有类似 Rake 的 Lua 模块?
澄清一下:如果可能的话,我希望这是一个独立的应用程序。它应该具有最少的先决条件,因为它将在相当简陋的 (Windows) 操作系统上运行。
有许多构建系统可以使用 Lua,它们强烈基于 Lua,甚至在 Lua 中实现。其中一些列在Lua User's Wiki中。
在 wiki 中列出的那些中,Bou明确地受到了 Rake 的启发。它的作者观察到,在项目开始时,另一个构建系统已经使用了“湖”这个名称,但没有提供链接,所以我不知道这个名称可能与什么有关。从那时起,Bou 已更名为Lake并搬到了新家。
Lake 是 Lua 社区的定期贡献者史蒂夫·多诺万 (steve donovan) 的创作。和 Bou 一样,它是在几乎纯 Lua 中实现的(它确实依赖LuaFileSystem进行文件系统访问)。它不是充当过滤器来创建 Makefile 或 IDE 项目文件,而是直接基于用 Lua 编写的项目描述驱动编译器。构建项目以 DSL(领域特定语言)描述,包括访问所有 Lua 以处理特殊情况。
Lua的“官方”二进制版本都来自一个名为tecmake的系统,该系统起源于 Tecgraf,就像 Lua 本身一样。Tecmake 是在 make 之上实现的,通过一个包装 shell 脚本和一组通用的 Makefile 规则来实现其约定。它对他们来说效果很好,但就我个人而言,我从来没有能够让它在我的系统上运行。正在努力使 LuaBinaries 构建远离 techmake 的怪癖。
LuaRocks使用 Lua 来描述构建需求,几乎完全用 Lua 编写,旨在与分布式应用程序集成,以便应用程序可以自我更新。据我了解,LuaRocks 的目标之一是使项目构建能够使用其独立于平台的“rock”文件,并且使用 LuaRocks 构建个人项目肯定会更容易发布它以便以后更广泛地分发。
作为一种后备,总是可以使用 Lua 作为另一种工具来扩展 makefile 驱动的构建。我已经以这种方式将它用于预处理任务,否则我可能会委托给 awk 或 perl,例如从当前化石修订版中收集详细信息到我构建的项目中。
更新:
随着时间的流逝,知识会提高。正如Victor T在评论中所观察到的,Steve's Lake 实际上是同一个名为 Bou 的项目。显然,对“Lake”这个名字的反对意见已经消退,我根本没有注意到它们是同一个工具。我已经编辑了原始答案及其更新,以更好地反映我目前的理解。
至少有两个不同的项目叫做“Lua Make”(你可以用谷歌搜索),还有一些与Lua Rocks相关的构建系统。目前尚不清楚 Lua Rocks 是否有用,但其他两个似乎值得一试。