makefile(09) _扩展支持

  

23。独立模块的支持

  

23.1。问题:

  

一般而言,不同工程师负责不同模块的开发,编译环境中如何支持模块的独立编译?

  

23.2。问题背景:

  
      <李>大型项目的代码成千上万,完整编译的时间较长,李   <李>编写模块代码时,可以通过编译检查语法错误;李   <李>为了提高开发效率,需要支持指定模块的独立编译
     makefile(09) _扩展支持“>
  <h3> 23.3。解决方案</h3> </李>
  <李>将模块名(模块)作为目标名(伪目标)建立规则李</>
  <李>目标(模块)对应的依赖为构建构建/模块李</>
  <李>规则中的命令进入对应的模块文件夹进行编译</李>
  <李>编译结果存放于构建文件夹下
  <h3> 23.4。关键技术点</h3>
  <p>如何获取让命令行中指定编译的模块名? <br/>预定义变量:美元(MAKECMDGOALS),命令行中指定的目标名(使的命令行参数)<br/> <img src=

      
  

23.6。思路

  

将编译模块的命令集作为自定义函数的具体实现
函数参数作为模块名,函数调用后编译参数指定的模块
在不同的规则中调用该函数
 makefile(09) _扩展支持“> <br/>编程实验:</p>
  <pre> <代码>定义makemodule
  cd(1美元),,\
  (使)所有\美元
  调试:=$ \(调试)
  DIR_BUILD:=$ (addprefix (DIR_PROJECT)/美元,美元(DIR_BUILD)) \
  DIR_COMMON_INC:=$ (addprefix (DIR_PROJECT)/美元,美元(DIR_COMMON_INC)) \
  CMD_CFG:=$ (addprefix (DIR_PROJECT)/美元,美元(CMD_CFG)) \
  MOD_CFG:=$ (addprefix (DIR_PROJECT)/美元,美元(MOD_CFG)) \
  MOD_RULE:=$ (addprefix (DIR_PROJECT)/美元,美元(MOD_RULE)),,\
  cd . .;
  endef </代码> </pre>
  <h3> 23.7。总结</h3>
  <ul>
  <李>编写模块代码时可以通过模块独立编译快速检查语法错误李</>
  <李>自动变量只能在规则的命令中使用,不能在依赖中使用李</>
  <李> Makefile中的自定义函数是代码复用的一种方式李</>
  <李>当不同规则中的命令大量重复时,可以考虑自定义函数
  <h2> 24。第三方库的支持</h2>
  <h3> 24.1。问题</h3>
  <p>当需要使用第三方库文件时,编译环境中的makefile如何修改? </p>
  <h3> 24.2。经验假设</h3> </李>
  <李>第三方库通过函数调用的方式提供库中的功能李</>
  <李>库文件发布时都附带了声明库函数原型的头文件</李>
  <李>编译阶段使用头文件,链接阶段使用库文件
  <h3> 24.3。第三方库在项目中的位置</h3>
  <p> <img src=

  

24.4。第三方库的编译阶段

  

定义变量DIR_LIBS_INC用于指示头文件的存储位置
DIR_LIBS_INC:=$ (DIR_PROJECT)/libs/公司
使用DIR_LIBS_INC提示使头文件的存储位置
Vpath % (TYPE_INC)美元(DIR_LIBS_INC)
使用DIR_LIBS_INC提示编译器头文件的存储位置
CFLAGS +=- $ (DIR_LIBS_INC)
编程实验(改动如下):
 makefile(09) _扩展支持

  

24.5。注意事项

  

定于DIR_LIBS_LIB:=libs/lib(第三方库所在位置)
链接时不会直接链接DIR_LIBS_LIB中的库文件,需要先将库文件拷贝到DIR_BUILD文件夹
必须考虑拷贝后的库文件和原始库文件的新旧关系

makefile(09) _扩展支持