在第三方库的项目中使用PC-Lint

Mar*_*ark 6 c embedded pc-lint

我有一个项目,其中包括一个大型的第三方库,我需要确保该项目不含棉绒.但是,该库有几千个错误.

修改库以删除这些不是一个选项 - 通常如何处理?

目前,代码是使用Keil uVision构建的,这是PC-Lint的调用方式,如果这仍然是最好的情况.

有没有办法指定这些是库文件,所以不应该分析?

谢谢.

emb*_*guy 8

以下是来自Gimpel网站的信息,我相信它涵盖了您正在寻找的选项(大胆添加以强调):

Lint使用"library"标头的标签来指定程序员无法控制的头文件(例如编译器头文件).默认情况下,所有来自外部目录的#includes或包含在<>中的#includes都被视为"库". 这可以通过使用+ libclass选项进行修改,并进一步使用+/- libdir和+/- libh选项进行微调.然后,您可以使用-wlib,-elib和-elibsym选项来控制从库头发出的消息. 随PC-lint一起分发的编译器选项文件通常包含-wlib(1)选项,该选项将库头的lint输出限制为仅错误(抑制警告和信息消息).

你可以找到在金培尔网站的详细信息在这里.

另外,如果我没记错的话,-wlib(0)会抑制所有库错误和警告......而不是上面提到的-wlib(1).当我回去工作时,我将不得不仔细检查.我没有手册的副本.

- -编辑 - -

如果是一个选项,我会将与库关联的所有文件放在不同的目录中.在Keil中,您可以转到"工具 - >设置PC-Lint".然后将新目录添加到"PC-Lint包含文件夹"列表中.然后,您的-wlib(0)选项应将这些标头视为"外来",而不是返回错误.当然,您还必须修改项目设置以编译库文件.

--- EDIT2新增示例---

好的,所以这是一个小测试,我试图确保我的建议可行.我在名为"ex_lib"的目录中创建了一个项目,并将项目命名为lib_test.在"Source Group 1"中,我创建并添加了文件"main.c":

main.c中

#include <lib_test.h>

int main (void)
{
    uint16_t x = 5;
    uint16_t y = 10;
    uint16_t total1 = 0;
    uint16_t total2 = 0;
    uint16_t total3 = 0;
    uint16_t total4 = 0;


    total1 = add(x,y);
    total2 = sub(x,y);
    total3 = mult(x,y);
    total4 = div(x,y);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

然后,我创建了一个名为"library"的子目录,并在该目录中创建了另一个名为library的项目.库项目由以下文件"lib_test.h"和"lib_test.c"组成.

lib_test.h

#ifndef LIB_TEST__
#define LIB_TEST__

#include <stdint.h>

extern uint16_t add(uint16_t x, uint16_t y);
extern uint16_t sub(uint16_t x, uint16_t y);
extern uint16_t mult(uint16_t x, uint16_t y);
extern uint16_t div(uint16_t x, uint16_t y);

#endif /* LIB_TEST__ */
Run Code Online (Sandbox Code Playgroud)

lib_test.c

#include "lib_test.h"

uint16_t add(uint16_t x, uint16_t y)
{
    return (x + y);
}

uint16_t sub(uint16_t x, uint16_t y)
{
    return (x - y);
}

uint16_t mult(uint16_t x, uint16_t y)
{
    return (x * y);
}

uint16_t div(uint16_t x, uint16_t y)
{
    return (x / y);
}
Run Code Online (Sandbox Code Playgroud)

项目中,在"目标选项1'目标1"下,我选择了"创建库".然后我编译了项目.

成功编译后,我回到lib_test项目并右键单击"Target1"并选择"添加组".我创建了一个名为"Library"的组,并将之前编译的"library.lib"从"library"目录添加到"Library"组.

最后,在目标1的选项(在lib_test项目中)下,我转到"C/C++"选项卡并将"库"添加到"包含路径".然后我能够成功编译lib_test项目(有一些关于变量被设置但从未使用的警告).在"工具 - >设置PC-Lint"下,我添加了以下内容:

PC-Lint包含文件夹:C:\ Keil_ARM\RV31\INC \和library \

Lint可执行文件:C:\ Lint\LINT-NT.EXE

配置文件:C:\ Lint\lnt\CO-RV.LNT

我修改了CO-RV.LNT文件以通过修改-wlib()来验证我的Lint结果.当我用-wlib(0)运行Lint时,我没有收到有关我的库文件的警告或错误.然后我改变了-wlib(2)并收到了很多关于stdint.h的警告.

这绝对是过于简单化,但它应该给你一个很好的起点.另外,我收到了关于我的变量没有在"main.c"中访问的Lint警告,但我希望如此.

  • 添加:在-wlib(0)之后使用-e686选项删除警告:选项'wlib(0)'是可疑的,因为...... (2认同)