我们一开始就有一个开源软件项目。该程序被认为是高度模块化的:例如,底层数据库可以是sqlite,postgre或berkley,具体取决于最终用户的偏好。
我唯信的一种系统方法是使用Autotools(GNU构建系统)。但我想知道,确实存在任何有希望的替代方案吗?它必须是开源的并且非常便携。它还应该避免Autotools系统的所有短缺,例如缺乏并发支持(配置脚本非常慢)。
答案 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.am
和here[12]/Makefile-files
中并行构建内容。
E.g。在建立了一些先决条件后,libgphoto2
将该机制用于build 50+ camera drivers in parallel。这大大加快了总构建时间。
好的,configure
脚本本身不会加速,但至少这仍然会进行交叉编译(与一些替代构建系统不同)。 (您将 portable 列为您的要求之一,这通常意味着交叉编译。)
答案 1 :(得分:0)
还考虑将CMAKE用于高度模块化的项目。