我们一开始就有一个开源软件项目。该程序被认为是高度模块化的:例如,底层数据库可以是 sqlite、postgre 或 berkley,具体取决于最终用户的偏好。
只有一种我有信心的系统方法是使用 Autotools(GNU 构建系统)。但是,我想知道,是否存在任何有希望的替代方案?它必须是开源的并且是高度可移植的。它还应该避免 Autotools 系统的所有不足,例如缺乏并发支持(配置脚本非常慢)。
我们一开始就有一个开源软件项目。该程序被认为是高度模块化的:例如,底层数据库可以是 sqlite、postgre 或 berkley,具体取决于最终用户的偏好。
只有一种我有信心的系统方法是使用 Autotools(GNU 构建系统)。但是,我想知道,是否存在任何有希望的替代方案?它必须是开源的并且是高度可移植的。它还应该避免 Autotools 系统的所有不足,例如缺乏并发支持(配置脚本非常慢)。
您可以很好地使用自动工具同时构建东西。您只需要避免对要并行构建的东西进行递归制作。基本思想是有一个Makefile.am
like:
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
并行。
例如,在构建了一些先决条件后libgphoto2
,使用该机制并行构建 50 多个摄像头驱动程序。这显着加快了总构建时间。
好的,configure
脚本本身不会因此而加速,但至少这仍然会进行交叉编译(与某些替代构建系统不同)。(您将可移植性列为您的要求之一,这通常意味着交叉编译。)
还可以考虑将CMAKE用于高度模块化的项目。