2010-11-30 5 views
2

Ich möchte eine Header-only C++ - Bibliothek in meinem Autotools-Projekt integrieren. Da die Bibliothek Autoconf und Automake verwendet, verwende ich AC_CONFIG_SUBDIRS in configure.ac und fügte das Bibliotheksverzeichnis zu der Zeile in Makefile.am hinzu.Include eine (Header-only) Bibliothek in einem Autotools-Projekt

Meine Frage ist: Wie kann ich verhindern, dass die Header-Bibliothek von make install installiert wird? Ich baue eine einzelne Binärdatei, so dass meine Benutzer diese Header nicht benötigen.

Ich würde es vorziehen, nicht mit der Bibliothek zu manipulieren, also kann ich ein Upgrade holen, indem ich einfach die neue Version entpacke.

Antwort

0

Verwenden Sie nicht SUBDIRS dann. Die folgenden Hack kann funktionieren:

 
all-local: 
     ${MAKE} -C thatlib all 

Natürlich wäre es am besten, wenn die Bibliothek in einem eigenen Verzeichnis blieb außerhalb Ihres Projekts, und Sie brauchen nur mit ihm über CFLAGS/LIBS Fahnen.

+1

Ich würde es gerne außerhalb meines Baumes behalten, aber ich versuche, die externen Abhängigkeiten zu reduzieren. Danke, werde das versuchen. –

+0

Funktioniert nicht. Dies baut die Bibliothek nach meinem Programm auf, was offensichtlich nicht funktioniert. –

2

Hier ist eine Idee.

Verschieben Sie alle Bibliotheken von Drittanbietern, die nicht als installiert angezeigt werden sollen, in ein Unterverzeichnis namens noinst/. Wenn Sie beispielsweise Ihr Projekt mit Boost versenden möchten, entpacken Sie es in das Verzeichnis noinst/boost/. Verwenden Sie AC_CONFIG_SUBDIRS([noinst/boost]). Innerhalb noinst/Makefile.am, tun Sie etwas wie folgt aus:

SUBDIRS = boost 
# Override Automake's installation targets with the command ":" that does nothing. 
install:; @: 
install-exec:; @: 
install-data:; @: 
uninstall:; @: 

Der Effekt ist, dass, wenn einige der rekursiven „* make install“ oder Befehle „make uninstall“ aus dem Top-Level-Verzeichnis ausführen, wird die Rekursion in noinst/ stoppen und nicht seine Unterverzeichnisse besuchen. Andere rekursive Befehle (wie "make", "make clean" oder "make dist") werden immer noch in die Unterverzeichnisse geladen.

Sie können natürlich install: und Freunde direkt in das Paket von Drittanbietern überschreiben, und vermeiden Sie die zusätzlichen noinst/ Verzeichnis. Aber wenn Sie wie ich sind, möchten Sie keine Pakete von Drittanbietern manipulieren, um deren Aktualisierung zu vereinfachen. Auch eine nette Eigenschaft der oben genannten Einrichtung ist, dass, wenn jemand in noinst/boost/ geht und sich entscheidet, make install zu laufen, es funktioniert. Es tritt nicht standardmäßig bei der Installation Ihres Pakets auf.

1

kam gerade über ein ähnliches Problem und fand die Lösung in der automake manual:

noinst_HEADERS die richtige Variable in einem Verzeichnis zu verwenden, wäre nur Header und keine verknüpfte Bibliothek oder Programm

enthält Andreas