一点一点学写Makefile(3)-增加第三方库和头文件
来源:互联网 发布:通联数据的量化平台 编辑:程序博客网 时间:2024/05/20 09:24
一点一点学写Makefile(3)-增加第三方库和头文件
我们在写代码的时候不一定都是有自己来完成,一个工程中会大量使用一些比较优秀的动态库、静态库等,我们在使用这些库完成所有的代码后,需要在编译的时候将这些库使用的头文件添加到我们的工程上,将他的库文件也添加到我们的工程中,接下来我们就来看一下怎么来添加。
我们在项目中很少将第三方库与我们自己的代码放到同一个目录中,而是有一些约定俗成的存放方法:
如上图,我们会将第三方库的头文件放到include文件夹,将第三方的静态库放到lib文件夹,将动态库放到bin文件夹,(注:如果是使用开源库尽可能使用静态库,因为这样会给部署带来极大的方便,我没在工程中使用动态库,因此没有bin文件夹,在这里需要提一下的就是,因为动态库so文件是在程序运行时加载的,因此需要联通程序一同发布)
废话不多说上代码(代码下载地址 选择makefile-3)
- //div.h 静态库所用头文件
- #ifndef __DIV_H__
- #define __DIV_H__
- #ifdef __cplusplus
- extern "C" {
- #endif
- double div(double x, double y);
- #ifdef __cplusplus
- }
- #endif
- #endif //__DIV_H__
03lib
|----lib
|----libdiv.a
|----include
|----div.h
|----main.cpp main.h
|----add.cpp add.h
|----sub.cpp sub.h
|----mul.cpp mul.h
|----Makefile
上面这是我的文件结构图,其中libdiv.a是我引用的外部库,div.h是该库的头文件,这两个文件分别放在了lib和include文件夹,下面请看我的Makefile文件夹
- Makefile
- CROSS =
- CC = $(CROSS)gcc
- CXX = $(CROSS)g++
- DEBUG = -g -O2
- CFLAGS = $(DEBUG) -Wall -c
- RM = rm -rf
- SRCS = $(wildcard ./*.cpp)
- OBJS = $(patsubst %.cpp, %.o, $(SRCS))
- HEADER_PATH = -I./include/
- LIB_PATH = -L./lib/
- LIBS = -ldiv
- # LIBS = libdiv.a
- VERSION = 1.0.0.1
- TARGET = test.$(VERSION)
- $(TARGET) : $(OBJS)
- $(CXX) $^ -o $@ $(LIB_PATH) $(LIBS)
- $(OBJS):%.o : %.cpp
- $(CXX) $(CFLAGS) $< -o $@ $(HEADER_PATH)
- clean:
- $(RM) $(TARGET) *.o
如上图,我添加了13、14、16、17行,其中13和14行是为了告诉源代码第三方库和头文件的路径,16行和17行意义是完全相同的,16行只是显示的表明我用静态库,但是在使用的时候需要注意,LIBS = -ldiv的方式一般用于动态库,LIBS = libdiv.a适用于静态库加载,而且只有当libdiv.a与Makefile在同一目录下才可以,一般静态库使用将目录写死的方式,但是这样的话又不方便代码的传播,在一点一点学写Makefile5我们将告诉大家如何灵活的将目录写死。
在23行我写的是$(CXX) $^ -o $@ $(LIB_PATH) $(LIBS),这是在最后链接是需要告诉编译器我的库放在了那个目录,以及该库的名字
在26行,我在后面添加了一个$(HEADER_PATH)即指定头文件的所在目录
- //main.cpp
- #include "add.h"
- #include "mul.h"
- #include "sub.h"
- #include <div.h>
- #include <iostream>
- using namespace std;
- int main()
- {
- cout << "add(1, 2) = " << add(1, 2) << endl;
- cout << "sub(1, 2) = " << sub(1, 2) << endl;
- cout << "mul(1, 2) = " << mul(1, 2) << endl;
- cout << "div(1, 2) = " << div(1, 3) << endl;
- return 0;
- }
看上图,注意我在包含div.h时候选择的<>符号
原文地址:http://www.cnblogs.com/catgatp/p/6527232.html
- 一点一点学写Makefile(3)-增加第三方库和头文件
- 一点一点学写Makefile(3)-增加第三方库和头文件
- 一点一点学写Makefile-1
- 一点一点学写Makefile(4)
- 一点一点学写Makefile(5)-获取文件所在路径
- 一点一点学写Makefile(5)-获取文件所在路径
- 一点一点学写Makefile(4) - 编译时指定宏参数
- 如何将第三方库和头文件加到gcc、g++中
- 一点一点学写Makefile(2)-自动搜所当前目录下的所有源文件
- 一点一点学写Makefile(6)-遍历当前目录源文件及其子目录下源文件
- 一点一点学写Makefile(2)-自动搜所当前目录下的所有源文件
- 一点一点学写Makefile(6)-遍历当前目录源文件及其子目录下源文件
- 一点一点学C#3
- 使用第三方库找不到头文件的解决办法
- pods第三方库,导入头文件没有提示
- Android 增加第三方库
- 第三方库文件
- 在android中增加 第三方库
- 使用Java AWT编写一个简单的计算器
- 支持向量机(SVM)
- Webpack(打包工具)
- C++之vector容器操作演示
- ugui与ngui如何检测是否点击在UI上
- 一点一点学写Makefile(3)-增加第三方库和头文件
- 解决MySQL无服务问题
- swift学习笔记4-函数
- 洛谷P3960 [NOIp2017]列队
- manacher算法及扩展
- 输入输出系统(一)
- C语言中的深拷贝和浅拷贝
- 13. Lucky Numbers (easy)
- 运用webpack手动搭建项目结构