linux 静态库,makefile

mkdir testlib,组织文件目录如下

my_math.h

int add(int a, int b);

int subtract(int a, int b);

my_math.c

#include "../include/my_math.h"

int add(int a, int b)
{
	    return a + b;
}

int subtract(int a, int b)
{
	    return a - b;
}

my_print.h

#include <stdio.h>

void cout(const char * message);
my_print.c

#include "../include/my_print.h" 

void cout(const char * message)
{
	    fprintf(stdout, "%s\n", message);
}

mylib.h

#ifndef __MY_LIB_H__
#define __MY_LIB_H__

int add(int a, int b);
int subtract(int a, int b);

void cout(const char *);
#endif

有以上文件 生成 libmylib.a

编写测试文件test.c,引用libmylib.a

test.c

#include <stdio.h>
#include "my_lib.h"

int main(void)
{
	int c = add(15, -21);
	cout("I am a func from mylib ...");
	printf("%d\n",c);
	return 0;
}

makefile

# 静态库的使用
# 
# make build 生成 libmylib.a
# make test 生成a.out可执行文件
# make clean 清除相关文件
#
.PHONY: build test clean

CC=gcc
OBJ_DIR=./obj
LIB_DIR=./lib
HEADERS=-I./include
DEBUG=-g -ggdb
WALL=-Wall -W
CFLAGS=$(WALL) $(DEBUG)
LIB_CC=$(CC) $(CFLAGS) $(HEADERS)

LIB_OBJ = $(addprefix $(OBJ_DIR)/, my_math.o my_print.o)

# 目录的判断与创建
prepare:
	@-if [ ! -d $(OBJ_DIR)  ];then mkdir $(OBJ_DIR); fi 
	@-if [ ! -d $(LIB_DIR)  ];then mkdir $(LIB_DIR); fi 

build:prepare $(LIB_DIR)/libmylib.a

# 使用ar链接生成静态库
$(LIB_DIR)/libmylib.a:$(LIB_OBJ)
	ar -crv $@ $^

$(OBJ_DIR)/%.o:src/%.c
	$(LIB_CC) -c $< -o $@

# 使用静态库
test:a.out

a.out:test.c
	$(LIB_CC) test.c -L$(LIB_DIR) -lmylib

clean:
	rm -rf $(OBJ_DIR)
	rm $(LIB_DIR)/libmylib.a
	rm a.out

makefile相关命令:

makefile中的.PHONY: http://blog.163.com/yangfan876@126/blog/static/80612456201371255834418/

makefile中的 $^ , $@, $<作用:http://blog.csdn.net/laogaoav/article/details/8520258

linux ar命令 静态库:http://blog.csdn.net/xuhongning/article/details/6365200


执行相应的make命令后





参考

linux 静态库生成 http://www.cnblogs.com/jiqingwu/p/4325382.html

Linux 动态库与静态库制作及使用详解:http://blog.csdn.net/mr_chenping/article/details/23823825


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值