标签:
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.atest.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; }
# 静态库的使用 # # 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中的 $^ , $@, $<作用: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
标签:
原文地址:http://blog.csdn.net/qq_26437925/article/details/51541717