首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用PC-Lint与第三方库进行项目

使用PC-Lint与第三方库进行项目
EN

Stack Overflow用户
提问于 2013-05-26 21:12:16
回答 1查看 8.2K关注 0票数 7

我有一个项目,其中包括一个大型第三方图书馆,并被要求确保该项目是免费的。然而,这个库有几千个错误。

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

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

是否有办法说明这些文件是库文件,因此不应该进行分析?

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2013-05-26 22:36:10

这是来自Gimpel网站的信息,我相信它涵盖了你正在寻找的选项(粗体加强调):

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

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

此外,如果我没有记错,-wlib(0)会取消所有库错误和警告.与上面提到的-wlib(1)相反。当我回去工作时,我得再检查一遍。我身上没有手册的副本。

--编辑--

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

-EDIT2 2添加的例子-

好吧,这是一个小小的测试,我试着确保我的建议能奏效。我在一个名为"ex_lib“的目录中创建了一个项目,并命名为lib_test。在"Source Group 1“中,我创建并添加了文件"main.c":

main.c

代码语言:javascript
复制
#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;
}

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

lib_test.h

代码语言:javascript
复制
#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

代码语言:javascript
复制
#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的选项”下,我选择了"Create“。然后我编译了项目。

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

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

PC-Lint包括文件夹: C:\Keil_ARM\RV31\INC\和库\

可执行林特: C:\ Lint \LINT-NT.EXE

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

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

这无疑是一个过度简化,但它应该给你一个好的起点。另外,我收到了Lint警告,说我的变量不能在"main.c“中访问,但我希望如此。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16763730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档