四、Makefile包含 头文件和库文件
一、Makefile规则
二、Makefile案例-多个文件生成一个目标文件
三、Makefile–生成多个目标文件
四、Makefile包含 头文件和库文件
此篇文章以三、Makefile–生成多个目标文件为例
包含头文件
我们在编译的时候 ,经常会遇到要包含一些其他的头文件,比如在编译test1.c test2.c test3.c 的时候 ,我们需要用到 test.h,但是这个头文件在/usr/include 目录下,直接 #include “test.h” 或者#include<test.h>
编译的时候 会报错 ,找不到该头文件
我们只要在Makefile 里面添加 头文件的路径即可
INC_CLUDE = -I/usr/include
%.o:%.c
$(GCC) -c $< -o $@ $(INCLUDE)
包含库文件
在链接的时候,我们经常会链接一些库文件进去,因为 在c文件里面 调用了一些 库文件里面的函数,所以需要连接进去,不然 找不该该函数
比如我们要使用 libf1.so libf2.so libf3.so文件,他们都在 /usr/lib目录下
我们只要在编译规则的后面添加 库文件的路径即可
lib_PATH = -L/usr/lib/ -lf1 -lf2 -lf3
.PHONY:all
all: $(TARGET1) $(TARGET2) $(TARGET3)
$(TARGET1): $(TARGET).o$(GCC) -o $< $@ $(lib_PATH)
全部打包到当前目录下
有时候 我们想把这个案例给别人使用,但是别人的 库文件和 头文件 不一定跟你的 在同一个路径下,如果直接使用库文件的路径,那不给到别人手上 ,不又得重新配置一下
所以最好的方式就是 在当前目录下创建一个include 目录 和 一个lib目录,如果文件 很多,也可以在include 下 和 lib下建立子目录 分类 不同类型的 头文件和 库文件 把需要的头文件 和 库文件 复制过来,这样在makefile里面配置为当前 目录,这样的话,我们无论给谁,他们都可以直接编译,不用做过多的操作。
我们把 test.h 文件 放到当前目录的include 目录下
libf1.so libf2.so libf3.so 放到当前目录的lib目录下
一个完整的makefile如下
INCLUDE = -I./include
LIB_PATH = -L./lib -lf1 -lf2 -lf3TARGET1 = test1
TARGET2 = test2
TARGET3 = test3.PHONY: all
all: $(TARGET1) $(TARGET2) $(TARGET3)
$(TARGET1) : $(TARGET1).o$(GCC) -o $@ $< $(LIB_PATH)
$(TARGET2) : $(TARGET2).o$(GCC) -o $@ $< $(LIB_PATH)$(TARGET3) : $(TARGET3).o $(GCC) -o $@ $< $(LIB_PATH)#build object
%.o : %.c$(GCC) -c $< -o $(INC_CLUDE).PHONY: clean
clean:-@rm -f $(TARGET1) $(TARGET1).o-@rm -f $(TARGET2) $(TARGET2).o-@rm -f $(TARGET3) $(TARGET3).o
四、Makefile包含 头文件和库文件相关推荐
- linux+C环境下动态管理头文件和库文件
本文共分三个部分:首先给出了一个简单的Makefile的例子,然后分别详细阐述了头文件和库文件的相关知识 1.一个Makefile的例: -L是指定链接时搜索路径,比如-L./等: -l是指定具体的库 ...
- Linux下gcc编译中关于头文件与库文件搜索路径相关问题
如何指定GCC的默认头文件路径 网上偶搜得之,以之为宝:) 原地址:http://blog.chinaunix.net/u/28781/showart.php?id=401631 ========== ...
- 头文件和库文件区别,动态库和静态库的区别,动静态库的生成
文章目录 一.什么是头文件?什么是库文件?有什么区别? 先说总结 目标文件 二.什么是静态库?什么是动态库?有什么区别? 三.为什么只用在程序头部写上包含的头文件,头文件中并没有实现内容就可以使用声明 ...
- 头文件与库文件的区别
一.头文件与库文件的区别 头文件一般而言,是申明和定义. 库文件是已经编译好的二进制代码.这个二进制代码可以是动态的,如 .so :也可以是静态的,如 .a .如果是动态的,则最后生成的程序文件在运行 ...
- .h头文件 .lib库文件 .dll动态链接库文件关系
.h头文件是编译时必须的,lib是链接时需要的,dll是运行时需要的. 附加依赖项的是.lib不是.dll,若生成了DLL,则肯定也生成 LIB文件.如果要完成源代码的编译和链接,有头文件和lib就够 ...
- C语言的头文件和库文件(函数库)
C语言的头文件和库文件(函数库) 分类: Unix环境高级编程 2011-04-17 14:37 2576人阅读 评论(1) 收藏 举报 语言cgcclinuxunix 在C语言中,头文件提供对常量的 ...
- .h头文件 .lib库文件 .dll动态库文件之间的关系
.h头文件是编译时必须的,lib是链接时需要的,dll是运行时需要的. 附加依赖项的是.lib不是.dll,若生成了DLL,则肯定也生成 LIB文件.如果要完成源代码的编译和链接,有头文件和li ...
- Winsock网络编程头文件及库文件的设置
Winsock是Windows下网络编程的规范.使用Winsock可以实现基于TCP或UDP的通信. 1 Winsock版本 Winsock主要包含两个版本,即Winsock1和Winsock2.Wi ...
- 华大单片机如何向MDK中加入头文件和库文件
华大单片机如何向MDK中加入头文件和库文件 关键文件介绍 加入头文件 大多数习惯于8位单片机开发的工程师,都会使用操作寄存器的方式来使用单片机.当初次接触华大单片机库开发的时候,会发现库里有好多的文件 ...
最新文章
- mysql全量和增量备份脚本
- php折半查找算法,php二分法查找(也叫折半查找)算法 (数组必须是从小到大的)
- 固态硬盘量产工具_固态硬盘怎么修复
- golang float浮点型精度丢失问题解决办法:使用decimal包;float与int的相互转换
- WCF系列(五) -- 也谈序列化(下)
- js实现上传图片及时预览
- RedHat7安装Tomcat
- sublime 正则搜索日语字符
- 小谈@override
- 青茶什么时候拆_为什么日本绿茶那么绿?比中国的高级绿茶还要绿
- 破解YouTube、Facebook推荐系统背后的那些算法
- 微课|中学生可以这样学Python(1.4节):安装扩展库
- 算法工程师面试备战笔记8_猜测这种划分最可能是什么聚类算法的结果
- 软件测试第一部分——初步概念与过程
- octave深度学习_【深度学习笔记】(一)Octave
- qmake,make,nmake
- 中软防水坝 怎么卸载_卸载中软防水墙软件 | 学步园
- ubutun 滑动 触控板_Ubuntu系统的笔记本触摸板怎么调节鼠标光标速度?
- 2004-2020中小企业板上市公司财务报表股票交易董事高管等面板数据
- Noise2Noise摘要