四、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 -lf3

TARGET1 = 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
  • 5
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值