如何将Lua置于大型项目子目录中以进行自动配置?

我想将C项目与Lua集成。

该项目必须在多个平台上构建,因此我想在与其他C代码一起Tree依赖于系统上的Lua安装。之前,我们使用 ax_lua 宏配置系统的Lua依赖项,但我想删除它并将Lua与其他代码一起构建。

与项目的其他部分不同,Lua 已经 有一个 Makefile,我不想将其转换为Makefile.am,然后再将其转换回Makefile.in再Makefile(除非,这是唯一的方法)。相反,我希望出现类似于在Lua文件夹中运行 make,并在设置适当的环境变量(LUA_INCLUDE,LUA_FLAGS,LUA)的情况下继续进行其余的构建。我应该添加到哪些文件(configure.ac或Makefile.am)以及哪些行?

project/
  lua-5.3.6/
    Makefile
  src/
    a.c
    b.c
  configure.ac
  Makefile.am
  ...
点赞
用户2402272
用户2402272

相反,我想要的是在Lua文件夹中运行make并且其余的构建过程会随着适当的环境变量(LUA_INCLUDE,LUA_FLAGS,LUA)设置进行。我应该在哪些文件(configure.ac或Makefile.am)中添加哪些行?

如果你不想手动执行,那么在配置项目之前尝试构建Lua将不太合适。此外,即使您事先手动构建了Lua,除非您还将其安装到构建系统中,否则假设ax_lua的宏将按预期工作是相当悲观的。

但是,如果您喜欢在整个项目构建期间通过递归“make”构建Lua,那么您要寻找的是Automake的SUBDIRS变量。正如文档所述,要构建的子目录不一定是基于Automake的。它们只需要在配置之后具有makefile。文档还列出了顶级makefile可能尝试在子目录中构建的目标,但是如果子目录makefile不支持所有目标,这并不是致命问题。您将在Makefile.am中添加此内容:

SUBDIRS = lua-5.3.6

环境变量是一个不同的问题,其答案部分取决于项目对它们的依赖关系。可能您只需在Makefile.am中设置所需的变量(作为make变量)。由于您正在控制Lua构建,因此可以事先确定所需的值。您的Makefile.am中的所有内容都将被复制到配置的Makefile中,因此您无需进行更多操作即可将这些变量传递到最终的make

例如,以下内容可能已足够:

LUA_INCLUDE = -I$(srcdir)/lua-5.3.6
LUA_LIB = lua-5.3.6/liblua-5.3.6.a

您可能还考虑放弃这些变量,而只是硬编码这些值,毕竟这些值将不再变化。

2021-07-13 01:56:54