24.第三方库的使用支持

2019/7/24 15:19:42 人评论 次浏览 分类:学习教程

 

1.问题

当需要使用第三方库文件时,编译环境中的makefile该如何修改?

 

2.经验假设

  • 第三方库通过函数调用的方式提供库中的功能
  • 库文件发布时都附带了声明库函数原型的头文件
  • 搬移阶段使用头文件,链接阶段使用库文件

3.第三方库在项目中的位置

第三方库的编译阶段支持

定义变量DIR_LIBS_INC用于指示头文件的存储位置

使用DIR_LIBS_INC提示make头文件的存储位置

使用DIR_LIBS_INC提示编译器头文件的存储位置

1. pro-cfg.mk中添加lib的路径

DIR_LIBS_INC := libs/inc

2. pro-rule.mk中增加命令行参数

DIR_LIBS_INC:=$(addprefix $(DIR_PROJECT)/, $(DIR_LIBS_INC)) \

 

3.添加vpath提示make去哪里找头文件(module-rule.mk和cmd-cfg.mk)

vpath %$(TYPE_INC) $(DIR_LIBS_INC)

 

CFLAGS := -I$(DIR_INC) -I$(DIR_COMMON_INC) -I$(DIR_LIBS_INC)

 

make main测试ok

4.注意事项

  • 定义DIR_LIBS_LIB:=libs/lib(第三方库所在路径)
  • 链接时不会直接链接DIR_LIBS_LIB中的库文件
  • 需要先将库文件拷贝到DIR_BUILD文件夹
  • 必须考虑拷贝后的库文件和原始库文件的心就关系

5.带三方库的链接阶段支持

  • 定义变量EXTERNAL_LIB用于保存第三方库列表
  • 目标link需要依赖于第三方库列表

为什么要放在后面?

如果第三方的库文件名和我们的库文件名一样

 

1.pro-rule.mk增加EXTERNAL_LIB变量

EXTERNAL_LIB := $(wildcard $(DIR_LIBS_LIB)/*)

EXTERNAL_LIB := $(patsubst $(DIR_LIBS_LIB)/%, $(DIR_BUILD)/%, $(EXTERNAL_LIB))

2.pro-cfg.mk第三方库存放路径

DIR_LIBS_LIB := libs/lib

测试ok

3.添加链接依赖pro-rule.mk和拷贝命令的变量cmd-cfg.mk

CP := cp

-------------------------------------

link $(APP) : $(MODULE_LIB) $(EXTERNAL_LIB)

        @echo "Begin to link ..."

        $(CC) -o $(APP) -Xlinker "-(" $^ -Xlinker "-)" $(LFLAGS)

        @echo "Link Success!"

$(DIR_BUILD)/% : $(DIR_LIBS_LIB)/%

        $(CP) $^ $@

如果我们不需要第三方库了呢?

删除libs/inc和libs/lib里面的内容

我们把main里面的调用去电,

make  all测试ok

 

 

6.小结

  • 编译环境必须支持第三方库的使用(静态库或动态库)
  • 工程开发中一般会使用特殊的文件夹存放第三方库
  • 第三方库所附带的头文件用于声明库函数(编译阶段需要)
  • 在链接阶段先将库文件拷贝到build文件夹,在进行链接

 

 

相关资讯

  • 那些我们不愿意承认的事

    很久没有见的老朋友,准确的说应该是很久没有见过的老师,一个比我大两岁的老师,我上初中的时候他从高中回来教我了一年。后来又回去上高中,我上高中的时候他上大学,现在我刚大学毕业他创办了公司。昨日一见依然如故,他还是热爱销售,而我却成了纯粹的技术人员。 看到他…

    2015/6/22 13:12:47

学习教程

共有访客发表了评论 网友评论

验证码: 看不清楚?

    立即查看