linux 静态库,makefile

转载 2016年05月30日 22:44:49

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/

shell的addprefix:http://blog.csdn.net/cjsycyl/article/details/8064958

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


用makefile编译生成.a文件(linux静态库),并编译进可执行文件中

文件列表: 代码文件/* 下列代码保存到 plus.cpp */int my_plus(int x,int y) { return x + y; } /* 下列代码保存到 m...

linux下makefile多目录编译动、静态库

在待编译的project目录下有以下文件: 进入project目录,用Vim编辑主makefile文件 BINARY_NAME = app.out CFLAGS = -Wall CC = gcc ...

linux动态库及静态库的制作 和makefile 的简单编写

一.库 什么是库,简单的可以说是可执行代码的二进制形式,能够被操作系统载入内存执行。操作系统的不同,二者的库也是不兼容的,如windows与linux. 库又分为静态库和动态库,动态库又称为共享库...

Linux Makefile 静态库动态库应用实例

在Linux系统中: 静态库的创建 gcc -c filen.c ar -cr libname.a file1.o file2.o ... ar:静态函数库创建的命令 -c :create的意思 -r...

Linux中的静态库、共享库、头文件及makefile文件举例

库:是一组预先编译好的函数的集合,linux中标准系统库文件一般存储在/lib和/usr/lib目录中 静态库:在程序编译过程中,就被链接到了程序编写者所写的源代码中,静态库以.a结束。 共享库:...

静态库创建与使用 makefile文件 linux 常用命令 honker

1、cd命令 这是一个非常基本,也是大家经常需要使用的命令,它用于切换当前目录,它的参数是要切换到的目录的路径,可以是绝对路径,也可以是相对路径。如: [plain] view plai...

linux下静态库、动态库编译及makefile书写

makefile示例: makefileobj:main.o fun1.o fun2.o        //makefileobj 生成的执行文件名 g++ -o makefileobj main...

如何linux下构建多目录下Makefile产生a静态库样例

前言: 我的工作最近需要用到linux下构建多目录下Makefile产生a静态库样例的知识,我将最新的学习心得,做一个记录分享,以便以后需要使用时可以做参考。 关键词: #linux gcc M...

linux下动态库和静态库的制作、寻找、比较及相关Makefile的编写

一.库的定义 什么是库,在windows平台和linux平台下都大量存在着库。 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。 由于windows和linux的本质不同,因此二...
  • LYX_WIN
  • LYX_WIN
  • 2016年08月13日 23:41
  • 648

linux学习 建立静态库,动态库,写简单的makefile

建立静态库 建立四个文件 bin(可执行文件),lib(库),include(头文件),src(放源文件) 这里的起的库明为add 在src文件中执行 1)gcc -c add.c //编...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:linux 静态库,makefile
举报原因:
原因补充:

(最多只允许输入30个字)