【问题标题】:Build system for a highly modular portable open source project [closed]为高度模块化的可移植开源项目构建系统 [关闭]
【发布时间】:2009-11-23 12:33:02
【问题描述】:
我们一开始就有一个开源软件项目。该程序被认为是高度模块化的:例如,底层数据库可以是 sqlite、postgre 或 berkley,具体取决于最终用户的偏好。
我唯一有信心的一种系统方法是使用 Autotools(GNU 构建系统)。但是,我想知道,是否存在任何有希望的替代方案?它必须是开源的并且是高度可移植的。它还应该避免 Autotools 系统的所有不足,例如缺乏并发支持(配置脚本很慢)。
【问题讨论】:
标签:
open-source
makefile
gnu
autotools
configure
【解决方案1】:
您可以很好地使用自动工具同时构建东西。您只需要避免对要并行构建的东西进行递归制作。基本的想法是有一个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 中并行构建内容。
例如libgphoto2 在构建了一些先决条件后使用该机制来build 50+ camera drivers in parallel。这显着加快了总构建时间。
好的,configure 脚本本身不会因此而加速,但至少这仍然会进行交叉编译(与某些替代构建系统不同)。 (您将 portable 列为您的要求之一,这通常意味着交叉编译。)