这样用很久了,目标选lib编译后执行批处理拷贝,库文件带debuginf还可以调试.51的话把每个函数放到一个c文件可以防止W16警告
(补充)
好吧既然加精化了我来展开补充一下,上面提到批处理拷贝,这个操作的目的是让LIB文件独立出来也就是你可以删除整个LIB工程而不影响LIB的使用,这个在你想要交付软件而又不想让别人看你源码的时候比较有用,你只给他LIB和头文件,而.c的文件是没有的,记得要去除denuginfo的选项哦List文件里是什么都有的.要实现这个目的最好目录结构需要一定的规划,源文件放到一个子目录底下,调试完成后删除这个目录只有一个LIB和一个.h文件留在工程里,使用库文件只需要这两个.lib是函数的执行码,.h是函数的调用方式及全局量引入、结构定义等等.
实现上就是每次编译后复制一份lib和相关的头文件到上层目录的libfile目录里,主工程引入lib和.h即可。
目录结构
编辑批处理
批处理文件内容
copy /Y .\Output\LCD1602_Driver.LIB ..\Lib_File\LCD_Driver.LIB
copy /Y .\LCDExternFun.h ..\Lib_File\LCD_Driver.h
加/y参数无条件覆盖,注意这里用的是相对路径,确保工程在移动后不会出问题.
lib工程里加入编译后执行
下一个问题是库函数调试的问题,要单步在源码级调试库函数有两个条件,1:库文件里包含debuginfo;2:需要调试的源文件手动打开;(注意这里说的是在源码级调试,汇编级调试是不需要源文件的).库文件编译好以后去除debuginfo然后开启优化选项,当你用到库函数的时候已经优化过的了是不是有点小爽呢.
最后一个问题,主工程里已经包含了这个库函数但是从来没有用到会出一个war16的警告,这个时候库函数的执行码已经包含在目标里面了,如果忽略这个警告是可以的但是会浪费存储空间.如果在keilforarm下不会有这个问题,因为keil有一个选项可以解决,但是keilfor51下面却没有,51不存在段的问题,所以只能一个函数一个.c这样调用的过程实际是个远调用.
(补充完)
本帖最后由 huo_hu 于 2014-11-17 10:51 编辑
谢谢,在论坛潜水了好久,不发点东西都感觉都不好意思了……
主要在网络上参考了别人是文章(感谢万能的网友),但是还是要自己实践一下,在实际的工作学习中可以快速的使用上刚学到的知识。应该要感谢