ubuntu makefile 静态库的生成与调用,动态库的生成与调用

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

编译后的目录结构如下:

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值