ubuntu makefile 静态库的生成与调用,动态库的生成与调用
准备工作
首先建立一个文件夹用以存放我们的文件
命令行下输入以下命令建立文件夹
mkdir Test
cd Test
1.静态库的生成
新建一个文件夹,static用来存放静态库的数据,在static下新建include和src文件夹,在include文件夹下建立头文件static.h
内容如下:
//static.h
#ifndef __STATIC_H
#define __STATIC_H
#include <iostream>
void staticFunc();
#endif
在src文件夹下建立源文件static.cpp
内容如下:
//static.cpp
#include "static.h"
void staticFunc()
{
std::cout << "static !" << std::endl;
}
在static文件夹下建立makefile文件,内容如下
####################### # Makefile #######################
# compile and lib parameter
CC := g++
LIBS :=
LDFLAGS :=
DEFINES :=
INCLUDE := -I.
CFLAGS :=
CXXFLAGS:=
INCLUDE_DIRS= -I./include
# link parameter
AR := ar
LIB := ../lib/static.a
#link
$(LIB):static.o
$(AR) -r $@ $^
#compile
static.o:./src/static.cpp
$(CC) -c $^ -o $@ $(INCLUDE_DIRS)
# clean
clean:
rm -fr *.o
2 . 动态库的生成
同样在,shared文件夹下建立include和src文件夹
在include文件下建立头文件shared.h,内容如下:
//shared.h
#ifndef __SHARED_H
#define __SHARED_H
#include <iostream>
void shared();
#endif
在src文件夹下建立源文件shared.cpp, 内容如下:
//shared.cpp
#include "shared.h"
void shared()
{
std::cout << "shared !" << std::endl;
}
在shared文件夹下建立makefile文件,内容如下:
####################### # Makefile #######################
# compile and lib parameter
CC := g++
LIBS :=
LDFLAGS :=
DEFINES :=
INCLUDE := -I.
CFLAGS := CXXFLAGS:=
# link parameter
LIB := ../lib/libShared.so
INCLUDE_DIRS= -I./include
#link
$(LIB):shared.o
$(CC) -shared -o -fPIC -o $@ $^
#compile
shared.o:./src/shared.cpp
$(CC) -c -fPIC $^ -o $@ $(INCLUDE_DIRS)
# clean
clean:
rm -fr *.o
在Test文件夹下建立lib文件夹用以存放生成的动态库和静态库。
3. 动态库和静态库的调用
在Test文件夹下建立example文件夹,在example文件夹下建立main.cpp,用以调用静态库和动态库,内容如下:
//main.cpp
#include "static.h"
#include "shared.h"
int main()
{
staticFunc();
shared();
return 0;
}
在example文件夹下建立makefile,内容如下:
####################### # Makefile #######################
# target
TARGET := main
# compile and lib parameter
CC := g++
LDFLAGS := -L../lib/libShared.so
LIBS := ../lib/static.a ../lib/libShared.so
DEFINES :=
INCLUDE := -I.
INC=-I.
CFLAGS :=
CXXFLAGS:=
INCLUDE_DIRS= -I../static/include -I../shared/include
# link
$(TARGET):main.o
$(CC) -o $@ $^ $(LIBS)
#compile
main.o:main.cpp
$(CC) -c $^ -o $@ $(INCLUDE_DIRS)
# clean
clean:
rm -fr *.o rm -fr $(TARGET)
%.o:%.c
$(CC) $(CFLAGS) $(INC) -o $@ -c $<
在Test文件夹下建立makefile文件,内容如下:
####################### # Makefile #######################
SUBDIRS= ./shared ./static ./example
all:$(SUBDIRS)
$(SUBDIRS):ECHO
make -C $@
ECHO:
@echo $(SUBDIRS)
@echo begin compile
目录结构如下:
输入make,生成动态库,静态库,编译
进入到example文件夹 ,运行main
cd example
./main
编译后的目录结构如下: