我的Makefile如下所示:
CXX = g++
CXXFLAGS = -g
INCLUDES = -Iinclude/
OBJS = a1.o \
b1.o
LIBPATH= /usr/lib/<arch>
test-app:$(OBJS)
$(CXX) -o $@ $(OBJS)
%.o : %.cpp
$(CXX) $(INCLUDES) -c $(CXXFLAGS) $< -o $@
我想在LIBPATH中链接两个文件lib1.so和lib2.so?任何人都可以帮我解释语法吗?
答案 0 :(得分:1)
语法是
test-app:$(OBJS)
$(CXX) -o $@ $(OBJS) -Lpath_to_your_lib -lyour_libname
此外,您应该使用pkg-config来查找这些变量值。
答案 1 :(得分:1)
试试这个:
LIBRARIES= -llib1 -llib2
...
test-app:$(OBJS)
$(CXX) -o $@ -L$(LIBPATH) $(LIBRARIES) $(OBJS)
考虑到参数顺序大多数时候都很重要,因为gcc编译器/链接器只按给定的顺序处理文件一次,如果顺序是错误的错误,例如&#34;符号找不到&#34;和&#34;未定义的参考&#34;将被制作。
尽管如此,我强烈推荐CMake,因为它的语法更简单,更动态,并且它支持许多构建平台(IDE,编译器,Makefile等)。
<强>更新强> 这种配置可能比上述更有效:
SHARED_LIBRARIES= -L/path/to/shared_libs -llib1 -llib2
STATIC_LIBRARIES= -L/path/to/static_libs -llib1 -llib2 -L/another/path/to/static_libs -llib3
...
test-app:$(OBJS)
$(CXX) -o $@ $(STATIC_LIBRARIES) $(SHARED_LIBRARIES) $(OBJS)