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

时间:2013-05-26 21:12:16

标签: c embedded pc-lint

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

修改库以删除它们不是一种选择 - 通常如何处理?

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

有没有办法指定这些是库文件,因此不应该进行分析?

感谢。

1 个答案:

答案 0 :(得分:8)

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

  

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

您可以在Gimpel网站here找到更多信息。

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

<强> --- --- EDIT

如果是一个选项,我会将与库关联的所有文件放在不同的目录中。在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;
}

然后我创建了一个名为“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__ */

<强> 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);
}

项目的“目标1的目标选项”下,我选择了“创建库”。然后我编译了项目。

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

最后,在目标1的选项下(在 lib_test 项目中),我转到“C / C ++”选项卡并将“库”添加到“包含路径”。然后,我能够成功编译(有关变量设置但未使用的一些警告) lib_test 项目。在“工具 - &gt;设置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警告,但我预料到了。

相关问题