2009-11-23 22 views
1

Nous avons un projet logiciel Open Source au tout début. Le programme est considéré comme hautement modulaire: par exemple, la base de données sous-jacente peut être sqlite, postgre ou berkley, selon les préférences de l'utilisateur final.Construire un système pour un projet open source hautement modulaire

Seule une approche systématique avec laquelle je suis confiant est d'utiliser Autotools (GNU build system). Je voudrais savoir cependant, existe-t-il une alternative prometteuse? Il doit être Open Source et être très portable. Il devrait également éviter toutes les pénuries de système Autotools, par ex. manque de prise en charge de la simultanéité (le script de configuration est très lent).

Répondre

0

Vous pouvez très bien créer des objets en même temps que des autotools. Vous avez juste besoin d'éviter de faire récursif pour les choses que vous voulez construire en parallèle. L'idée de base est d'avoir un Makefile.am comme:

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

et here1/Makefile-files comme:

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 

Puis les choses dans les sous-répertoires sub1/ et sub2/ seront construites séparément à partir du répertoire courant et avant (même Bien que les versions respectives puissent faire des choses en parallèle avec la même astuce!), puis le répertoire courant commencera à construire les trucs dans les Makefile.am et here[12]/Makefile-files du répertoire courant en parallèle.

E.g. libgphoto2 utiliser ce mécanisme à build 50+ camera drivers in parallel après quelques prérequesites ont été construits. Cela accélère considérablement le temps de construction total. OK, le script configure lui-même ne sera pas accéléré par cela, mais au moins cela fera toujours de la compilation croisée (contrairement à d'autres systèmes de compilation). (Vous indiquez portable comme l'une de vos exigences, et cela implique souvent une compilation croisée.)

0

Pensez également à utiliser CMAKE pour les projets hautement modulaires.