一、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包含 头文件和库文件相关推荐

  1. linux+C环境下动态管理头文件和库文件

    本文共分三个部分:首先给出了一个简单的Makefile的例子,然后分别详细阐述了头文件和库文件的相关知识 1.一个Makefile的例: -L是指定链接时搜索路径,比如-L./等: -l是指定具体的库 ...

  2. Linux下gcc编译中关于头文件与库文件搜索路径相关问题

    如何指定GCC的默认头文件路径 网上偶搜得之,以之为宝:) 原地址:http://blog.chinaunix.net/u/28781/showart.php?id=401631 ========== ...

  3. 头文件和库文件区别,动态库和静态库的区别,动静态库的生成

    文章目录 一.什么是头文件?什么是库文件?有什么区别? 先说总结 目标文件 二.什么是静态库?什么是动态库?有什么区别? 三.为什么只用在程序头部写上包含的头文件,头文件中并没有实现内容就可以使用声明 ...

  4. 头文件与库文件的区别

    一.头文件与库文件的区别 头文件一般而言,是申明和定义. 库文件是已经编译好的二进制代码.这个二进制代码可以是动态的,如 .so :也可以是静态的,如 .a .如果是动态的,则最后生成的程序文件在运行 ...

  5. .h头文件 .lib库文件 .dll动态链接库文件关系

    .h头文件是编译时必须的,lib是链接时需要的,dll是运行时需要的. 附加依赖项的是.lib不是.dll,若生成了DLL,则肯定也生成 LIB文件.如果要完成源代码的编译和链接,有头文件和lib就够 ...

  6. C语言的头文件和库文件(函数库)

    C语言的头文件和库文件(函数库) 分类: Unix环境高级编程 2011-04-17 14:37 2576人阅读 评论(1) 收藏 举报 语言cgcclinuxunix 在C语言中,头文件提供对常量的 ...

  7. .h头文件 .lib库文件 .dll动态库文件之间的关系

     .h头文件是编译时必须的,lib是链接时需要的,dll是运行时需要的. 附加依赖项的是.lib不是.dll,若生成了DLL,则肯定也生成 LIB文件.如果要完成源代码的编译和链接,有头文件和li ...

  8. Winsock网络编程头文件及库文件的设置

    Winsock是Windows下网络编程的规范.使用Winsock可以实现基于TCP或UDP的通信. 1 Winsock版本 Winsock主要包含两个版本,即Winsock1和Winsock2.Wi ...

  9. 华大单片机如何向MDK中加入头文件和库文件

    华大单片机如何向MDK中加入头文件和库文件 关键文件介绍 加入头文件 大多数习惯于8位单片机开发的工程师,都会使用操作寄存器的方式来使用单片机.当初次接触华大单片机库开发的时候,会发现库里有好多的文件 ...

最新文章

  1. mysql全量和增量备份脚本
  2. php折半查找算法,php二分法查找(也叫折半查找)算法 (数组必须是从小到大的)
  3. 固态硬盘量产工具_固态硬盘怎么修复
  4. golang float浮点型精度丢失问题解决办法:使用decimal包;float与int的相互转换
  5. WCF系列(五) -- 也谈序列化(下)
  6. js实现上传图片及时预览
  7. RedHat7安装Tomcat
  8. sublime 正则搜索日语字符
  9. 小谈@override
  10. 青茶什么时候拆_为什么日本绿茶那么绿?比中国的高级绿茶还要绿
  11. 破解YouTube、Facebook推荐系统背后的那些算法
  12. 微课|中学生可以这样学Python(1.4节):安装扩展库
  13. 算法工程师面试备战笔记8_猜测这种划分最可能是什么聚类算法的结果
  14. 软件测试第一部分——初步概念与过程
  15. octave深度学习_【深度学习笔记】(一)Octave
  16. qmake,make,nmake
  17. 中软防水坝 怎么卸载_卸载中软防水墙软件 | 学步园
  18. ubutun 滑动 触控板_Ubuntu系统的笔记本触摸板怎么调节鼠标光标速度?
  19. 2004-2020中小企业板上市公司财务报表股票交易董事高管等面板数据
  20. Noise2Noise摘要

热门文章

  1. 踩到了不可见字符\u200B的坑(0长度的字符)
  2. python中的顿号与加号
  3. 【2012年中山纪念中学信息学竞赛初一选拔赛一】纪中作业(c)
  4. CRM系统的整体功能设计
  5. 【目录】成为独立开发者
  6. Comparable用法
  7. 计算机电源可以带上飞机吗,科普:多大容量的移动电源可以带上飞机?
  8. GIS界19个研究方向
  9. AxureRP_for_chorme的安装和使用方法
  10. [NOI2005]瑰丽华尔兹