makefile显式链接多个动态库

时间:2016-11-17 05:51:06

标签: 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)?这是我现在可以让它工作的唯一方法(上面没有)。

1 个答案:

答案 0 :(得分:1)

如果希望链接器搜索路径,则必须使用-l标志添加库。因此,您不必将libboost_system-mt.a添加到链接行,而是必须将-lboost_system-mt添加到链接行。然后链接器将搜索-L提供的路径。

我不确定dylib的东西;我对OS X做的不多。

无论如何,如果你使用的是GNU make,你可以这样做:

LIBNAMES := filesystem-mt filesystem system-mt system

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