2016-11-17 3 views
0

Ich versuche, wie so ein einfaches Make-Datei Beispiel zusammen zu stellen:Make-Datei Verknüpfung explizit mehr dynamischen Bibliotheken

FLAGS = -std=c++14 
INC= -I/usr/local/include 
LI = -L/usr/local/lib 
LIB = /usr/local/lib/ 
LIBS = $(LIB)libboost_filesystem-mt.a \ 
    $(LIB)libboost_filesystem-mt.dylib \ 
    $(LIB)libboost_filesystem.a \ 
    $(LIB)libboost_filesystem.dylib \ 
    $(LIB)libboost_system-mt.a \ 
    $(LIB)libboost_system-mt.dylib \ 
    $(LIB)libboost_system.a \ 
    $(LIB)libboost_system.dylib 

default: 
    g++ main.cpp $(FLAGS) $(INC) $(LI) $(LIBS) -o assemble 
    ./assemble 

clean: 
    rm assemble 

Gibt es eine Möglichkeit, um nicht mehr als $ (LIB) so oft vorangestellt hat? Das ist der einzige Weg, wie ich das jetzt zur Arbeit bringen kann (das obige nicht).

+0

ich, dass die '-L/usr/local gedacht hätte/lib 'kümmert sich schon darum; Mit diesem '-L'-Flag muss der Verzeichnisname nicht vorangestellt werden. – Evert

+0

Es ist mir jedoch unklar, warum Sie sowohl dynamische als auch statische Bibliotheken verknüpfen. – Evert

+0

@Evert, tut es nicht. Es ist mir auch unklar. Das hat in der Vergangenheit funktioniert. Ich kann sicherlich damit herumspielen, aber im Moment bin ich nur mit der Frage beschäftigt. –

Antwort

1

Wenn der Linker den Pfad durchsuchen soll, müssen Bibliotheken mithilfe des Flags -l hinzugefügt werden. Anstatt also libboost_system-mt.a zu Ihrer Verbindungslinie hinzuzufügen, müssen Sie -lboost_system-mt zu Ihrer Verbindungslinie hinzufügen. Dann sucht der Linker die von -L bereitgestellten Pfade.

Ich bin mir nicht sicher über die dylib Sachen; Ich mache nicht viel mit OS X.

Auf jeden Fall, wenn Sie GNU verwenden machen Sie dies tun können:

LIBNAMES := filesystem-mt filesystem system-mt system 

LIBS := $(foreach N,$(LIBNAMES),$(LIB)libboost_$N.a $(LIB)libboost_$N.dylib) 
+0

Sehr schön, danke. –

Verwandte Themen