Lua 如何从premake构建脚本运行自定义工具? 我在我的C++应用程序中使用数据序列化。我想在我的构建脚本中添加对protoc代码生成器的调用(从而确保生成的类的最新状态,避免将生成的源代码存储在版本控制下)

Lua 如何从premake构建脚本运行自定义工具? 我在我的C++应用程序中使用数据序列化。我想在我的构建脚本中添加对protoc代码生成器的调用(从而确保生成的类的最新状态,避免将生成的源代码存储在版本控制下),lua,build-process,premake,Lua,Build Process,Premake,就连他们自己也有一个问题和答案,但答案对我来说是非常不完整的。能够调用任何lua函数是很好的,但是我应该把调用放在哪里呢?在构建应用程序或单元测试之前,我需要运行protoc编译器 您当然可以从Premake脚本调用外部代码。但是请记住:预生成脚本用于生成构建文件:Makefiles、C++项目等。预构建脚本在生成项目之前运行。 如果您希望这个预处理在实际构建文件之外运行(而不是通过make、VC++、Code::Blocks等),那么这很容易。Lua的os.execute将执行命令行 Prem

就连他们自己也有一个问题和答案,但答案对我来说是非常不完整的。能够调用任何lua函数是很好的,但是我应该把调用放在哪里呢?在构建应用程序或单元测试之前,我需要运行protoc编译器

您当然可以从Premake脚本调用外部代码。但是请记住:预生成脚本用于生成构建文件:Makefiles、C++项目等。预构建脚本在生成项目之前运行。 如果您希望这个预处理在实际构建文件之外运行(而不是通过make、VC++、Code::Blocks等),那么这很容易。Lua的
os.execute
将执行命令行


Premake脚本仍然是Lua脚本。所有的Premake命令都只是对Premake定义的函数的Lua调用。Premake执行脚本,然后使用脚本中的数据生成生成文件。因此,所有Lua代码都是在脚本执行期间运行的。在脚本中放置此命令的位置是不相关的;无论它在哪里,它都会在生成生成文件之前执行。

如果您想在生成过程中运行protoc步骤(从VC++、makefile等),可以设置一个预生成命令。有关更多信息和示例,请参阅。

感谢您的关注。我记得premake脚本实际上是一个lua脚本,但我不理解它的后果。根据我自己的经验,这可能会很棘手,特别是当你事先不知道开发人员将在什么操作系统中使用你的包时。幸运的是,用于原型文件构建时处理的命令与用于原型文件预制时处理的命令相同。棘手的部分是,您不适合使用
文件
块,因此必须使用
os.matchfiles
找到protos,为每个文件生成命令,然后将其交给
os.execute
。我强烈建议您使用
pcall
,以便捕获可能发生的操作系统异常。