编译基础——如何用g++编译自己的库,以及一个简单的makefile文件
来源:互联网 发布:淘宝html5模板 编辑:程序博客网 时间:2024/06/03 03:00
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文件:
#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 = gccCPP = g++RM = rm -rf## debug flagDBG_ENABLE = 1## source file pathSRC_PATH := .## target exec file nameTARGET := test## get all source filesSRCS += $(wildcard $(SRC_PATH)/*.cpp)## all .o based on all .cOBJS := $(SRCS:.cpp=.o)## need libs, add at hereLIBS := MyApi## used headers file pathINCLUDE_PATH := .## used include librarys file pathLIBRARY_PATH := lib## debug for debug info, when use gdb to debugifeq (1, ${DBG_ENABLE}) CFLAGS += -D_DEBUG -O0 -g -DDEBUG=1endif## get all include pathCFLAGS += $(foreach dir, $(INCLUDE_PATH), -I$(dir))## get all library pathLDFLAGS += $(foreach lib, $(LIBRARY_PATH), -L$(lib))## get all librarysLDFLAGS += $(foreach lib, $(LIBS), -l$(lib))## c++11 supportCFLAGS += -std=c++11all: buildbuild:$(CPP) -c $(CFLAGS) $(SRCS)$(CPP) $(CFLAGS) -o $(TARGET) $(OBJS) $(LDFLAGS)$(RM) $(OBJS)clean:$(RM) $(OBJS) $(TARGET)
0 0
- 编译基础——如何用g++编译自己的库,以及一个简单的makefile文件
- 望讨论——如何用VB构造一个WHILE语句的翻译(编译问题)
- 如何用一个makefile编译多个目标
- 如何用一个makefile编译多个目标
- 如何用一个makefile编译多个目标
- 使用g++编译一个简单的cc文件
- 在VC里如何用Makefile文件编译?
- 在VC里如何用Makefile文件编译?
- 在VC里如何用Makefile文件编译?
- 如何用VC6编译生成BREW的MOD文件
- 如何用VC6编译生成BREW的MOD文件?
- 如何用gcc/g++编译生成so链接库,以及how to use .so
- makefile编译一个目录下的文件
- [转]——如何用Java编写自己的库
- g++多文件编译和简单MakeFile文件写法
- g++多文件编译和简单MakeFile文件写法
- g++多文件编译和简单MakeFile文件写法
- 一个简单的makefile的实现,编译当前目录下所有的.c文件
- sql查询重复记录、删除重复记录方法大全
- 不使用中间变量交换两数
- Android旋转图片
- java6.01学习笔记TCPServer
- 九度 题目1176:树查找
- 编译基础——如何用g++编译自己的库,以及一个简单的makefile文件
- JAVA基础再回首(一)——基本概念、JAVA开发工具、JAVA基本语法
- 冒泡排序算法的两种优化
- tp框架在构造函数中调用成员方法笔记
- 创建cookie,慢慢更~
- 2016下半年计划
- CodeForces 624A Save Luke神庙大逃亡(暑期小练习)
- String Intern()
- leetcode 11. Container With Most Water-最大容器|双指针