如何将静态库输出到当前的另一个目录?

时间:2015-01-04 15:44:14

标签: linux static-libraries

Following is my directory structure

calculator
|
|---src
      (multiply.cpp sum.cpp)
|---lib

I am building a static library calc.a using following    
ar -rcs calc.a multiply.o sum.o

calc.a构建在当前目录中。

I trying calc.a to be put into lib folder not in current directory (i.e. src)

我在互联网和手册页中搜索但找不到任何内容。 有什么想法吗?

1 个答案:

答案 0 :(得分:2)

由于您使用的是命令行,因此将库写入lib目录的最简单方法是明确地执行此操作:

ar -rcs lib / libcalc.a multiply.o sum.o

使用Makefile你可以做更复杂的事情,但即便如此,它归结为同样的事情,例如将路径添加到库名称的前面。

由于您要求提供有关评论的其他信息,我在这里添加了一个简单的Makefile,这可能对您有所帮助:

CC=g++
CFLAGS=-c -Wall
LDFLAGS=

SOURCES=src/main.cpp src/sum.cpp src/multiply.cpp
OBJECTS=$(SOURCES:.cpp=.o)
LIBRARY=lib/libcalc.a
EXECUTABLE=main

all: $(SOURCES) $(LIBRARY) $(EXECUTABLE)

$(LIBRARY): $(OBJECTS)
<tab>mkdir -p lib
<tab>ar -rcs $@ $<

$(EXECUTABLE): $(OBJECTS)
<tab>$(CC) $(LDFLAGS) $(OBJECTS) -o $@

.cpp.o:
<tab>$(CC) $(CFLAGS) $< -o $@

clean:
<tab>rm -rf main lib/ src/*.o

重要提示:必须根据Makefile语法的要求,用真正的标签替换所有<tab>

Makefile非常灵活,因此它们可以非常简单和特定于您的问题,或者基于数以百万计的源代码构建许多库和二进制文件的一般和/或复杂。我建议您搜索Makefile文档以获取更多信息。

作为最后一点,我还建议您将您的图书馆重命名为“libcalc.a&#39;”,因为&#39; lib&#39;前缀是Unix中的标准。其他类似标准适用于其他环境。