为高度模块化的便携式开源项目构建系统

时间:2009-11-23 12:33:03

标签: open-source makefile gnu autotools configure

我们一开始就有一个开源软件项目。该程序被认为是高度模块化的:例如,底层数据库可以是sqlite,postgre或berkley,具体取决于最终用户的偏好。

我唯信的一种系统方法是使用Autotools(GNU构建系统)。但我想知道,确实存在任何有希望的替代方案吗?它必须是开源的并且非常便携。它还应该避免Autotools系统的所有短缺,例如缺乏并发支持(配置脚本非常慢)。

2 个答案:

答案 0 :(得分:0)

您可以使用autotools同时构建内容。您只需要避免对要并行构建的内容进行递归make。基本想法是Makefile.am喜欢:

bin_PROGRAMS =
noinst_LDLIBRARIES =
SUBDIRS = sub1 sub2 .
include here1/Makefile-files
include here2/Makefile-files

here1/Makefile-files喜欢:

bin_PROGRAMS += here1
noinst_LDLIBRARIES += libhere1.la
here1_SOURCES = here1/src1.c here1/src2.c here1/src3.c
libhere1_la_SOURCES = here1/lib1.c here1/lib2.c

然后子目录sub1/sub2/中的内容将与当前目录分开构建,并且在它之前(即使相应的构建可能与相同的技巧并行执行!),以及然后当前目录将开始在当前目录的Makefile.amhere[12]/Makefile-files中并行构建内容。

E.g。在建立了一些先决条件后,libgphoto2将该机制用于build 50+ camera drivers in parallel。这大大加快了总构建时间。

好的,configure脚本本身不会加速,但至少这仍然会进行交叉编译(与一些替代构建系统不同)。 (您将 portable 列为您的要求之一,这通常意味着交叉编译。)

答案 1 :(得分:0)

还考虑将CMAKE用于高度模块化的项目。