2016-11-17 59 views
0

我試圖把一個簡單的makefile例子,像這樣:makefile文件明確鏈接多個動態庫

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 

有沒有辦法不具有前面加上$(LIB)這麼多次?這是我能夠立即開始工作的唯一方法(上面沒有)。

+0

我會認爲'-L在/ usr /本地/ lib'已經處理好了;用'-L'標誌,不需要預先設定目錄名稱。 – Evert

+0

雖然我不清楚,爲什麼你要鏈接動態*和*靜態庫。 – Evert

+0

@Evert,它沒有。我也不清楚。這是過去的工作。我當然可以玩弄它,但現在我只關心手頭的問題。 –

回答

1

如果您希望鏈接程序搜索路徑,則必須使用-l標誌添加庫。因此,您不必將libboost_system-mt.a添加到您的鏈接行,而必須將-lboost_system-mt添加到您的鏈接行。然後鏈接程序將搜索由-L提供的路徑。

我不確定dylib的東西;我不OS X.

做很多在任何情況下,如果你使用GNU讓你可以這樣做:

LIBNAMES := filesystem-mt filesystem system-mt system 

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

非常好,謝謝。 –