2016-05-02 19 views
1

Ich verwende Autotools zum Erstellen meines Projekts, das mehrere Binärdateien (Repo mit Kommandozeilen-Tools) enthält.Automake Verknüpfung für mehrere PROGRAMME

Wie kann ich einige der Bibliotheken mit allen Programmen und einigen anderen Bibliotheken nur mit bestimmten Programmen verknüpfen?

Beispiel:
Mein Makefile.am:

bin_PROGRAMS= prog1 prog2 
prog1_SOURCES=prog1.cpp 
prog2_SOURCES=prog2.cpp 

prog1_LDADD= -llib-only-for-prog1 

LDADD=-llib-for-all-projects  # this does not work 
#AM_LDFLAGS=-llib-for-all-projects  # this does not work either 
#LINK=-llib-for-all-projects  # this does not work either 

Ich möchte prog1 gegen -llib-only-for-prog1 verknüpft werden und -llib-for-all-projects
während prog2 - nur gegen -llib-for-all-projects.

Wie kann ich das mit Autotools erreichen?

+0

Sie könnten auch finden: ['AM_DEFAULT_SOURCE_EXT = .cpp'] (http://www.gnu.org/software/automake/manual/automake.html#Default-_005fSOURCES) nützlich hier. –

+0

@BrettHale Danke. Ich habe viele Programme in meinem Repo, aber nur einige verwenden mehr Quellen als eine. Ich verstehe, dass dies funktioniert, wenn ich die ' _SOURCES' nicht spezifiziere und wenn ich es tue, wird es überschreiben, richtig? – lewiatan

Antwort

2

Grundsätzlich, wenn Sie LDADD für ein spezifisches Programm hinzufügen (prog1_LDADD), wird es die gemeinsamen LDADD Optionen ignorieren.

Die folgenden Werke für mich:

bin_PROGRAMS=prog1 prog2 prog3 
prog1_SOURCES=prog1.c 
prog2_SOURCES=prog2.c 
prog3_SOURCES=prog3.c 

LDADD=-llib-for-all-projects 
prog1_LDADD=-llib-only-for-prog1 $(LDADD) 

Note der Extra $(LDADD) in der prog1_LDADD -Linie.

+0

Ok. Ich wusste nicht, dass 'prog1_LDADD' das' LDADD' überschreibt. Das hilft mir. Vielen Dank – lewiatan