【c/c++】如何用g++编译自己的库,以及一个简单的makefile文件

正文

1. 首先写一个自己的库:

#include "../MyAPI.h"
#include <cstdlib>
#include <ctime>

int getRandom(int boundary)
{
	if (boundary <= 0 )
	{
		return 0;
	}
	srand((unsigned)time(NULL)); 	
	return rand() % boundary;
}

这里的MyAPI.h是库对应的头文件(这里用../MyAPI.h是因为库文件源代码在lib目录下,而头文件跟lib目录在同级目录):

int getRandom(int boundary);

2. 接着要编译这个库,在这之前需要将源文件编译成.o文件:

3. 之后再将.o文件打包成lib,在类Unix系统中,静态库是.a文件:

4. 之后就是使用这个lib库了,下面是使用该库的源代码:

#include "basic.h"

int main()
{
	cout << getRandom(20) << endl;

}

5. 源代码中只需要包含头文件就可以了,重点在于编译的时候,下面是编译命令:

这里需要注意两点:

1) -L参数指定包含lib的目录;-l指定lib名;

2)lib名也需要注意,名称是libMyAPI.a,但是使用时不需要加lib和.a后缀。

当然也可以不使用-L -l等选项,直接使用lib全称:

之后生成的a.out就可以使用了。

这里之所以提到-L和-l参数,原因是在写makefile时,-L和-l会带来更多的便利。

以上是一个简单的例子。

也可以写一个makefile文件来做这个,下面是一个makefile的例子:

#####################################################################
## file        : test makefile for build current dir .cpp          ##
## author      :                                                   ##
## date-time   :                                                   ##
#####################################################################

CC      = gcc
CPP     = g++
RM      = rm -rf

## debug flag
DBG_ENABLE   = 1

## source file path
SRC_PATH   := .

## target exec file name
TARGET     := test

## get all source files
SRCS         += $(wildcard $(SRC_PATH)/*.cpp)

## all .o based on all .c
OBJS        := $(SRCS:.cpp=.o)


## need libs, add at here
LIBS := MyApi

## used headers  file path
INCLUDE_PATH := .

## used include librarys file path
LIBRARY_PATH := lib

## debug for debug info, when use gdb to debug
ifeq (1, ${DBG_ENABLE}) 
CFLAGS += -D_DEBUG -O0 -g -DDEBUG=1
endif

## get all include path
CFLAGS  += $(foreach dir, $(INCLUDE_PATH), -I$(dir))

## get all library path
LDFLAGS += $(foreach lib, $(LIBRARY_PATH), -L$(lib))

## get all librarys
LDFLAGS += $(foreach lib, $(LIBS), -l$(lib))

## c++11 support
CFLAGS += -std=c++11

all: build

build:
	$(CPP) -c $(CFLAGS) $(SRCS)
	$(CPP) $(CFLAGS) -o $(TARGET) $(OBJS) $(LDFLAGS)
	$(RM) $(OBJS)

clean:
	$(RM) $(OBJS) $(TARGET)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值