build make不会检测到任何错误
我有一个非常简单的.c文件,里面有一些明显的错误。
#include <stdio.h>
struct S {
int x;
};
void f(struct S s){
}
void test() {
struct S s;
f(s); // warn
}
int test2(int x){
return 5/(x-x); // warn
}
int main(){
test();
test2(532);
printf("Hejrr");
}
我正在尝试使用clang的静态代码分析工具(scan-build)来检测错误。 当我直接在文件上运行该工具时,例如使用以下命令:
scan-build g ++ -o 1 1.c
我确实得到了预期的输出结果,其中包括编译器提出的一个警告,提到除数为0。
scan-build:使用'/usr/lib/llvm-3.8/bin/clang'进行静态分析
1.c:函数'int test2(int)':1.c:16:11:warning:除零[-Wdiv-by-zero]返回5 /(xx); ^
1.c:16:11:警告:归零归零5 /(xx);
〜^ ~~~~~ 1警告产生。 扫描构建:找到1个错误。 scan-build:运行'scan-view / tmp / scan-build-2016-07-11-152043-3028-1'来检查错误报告。
现在,我正试图将该命令放入一个非常简单的Makefile中。 我的Makefile的内容是:
all: 1.c
g++ -o 1 1.c
clean:
rm -f *.o 1
但是,每当我使用make运行scan-build时,使用以下命令:
扫描 - 构建
我仍然从编译器得到警告,但不是扫描生成工具!
scan-build:使用'/usr/lib/llvm-3.8/bin/clang'进行静态分析
g ++ -o 1 1.c
1.c:在函数'int test2(int)'中:
1.c:16:11:警告:除以零[-Wdiv-by-zero]返回5 /(xx);
^ scan-build:删除目录'/ tmp / scan-build-2016-07-11-152326-3055-1',因为它不包含任何报告。 扫描构建:没有发现错误。
我在C和C ++文件中都观察到相同的行为。 我发现有人在过去(2012年)遇到过类似的错误,但是提出的答案似乎并不奏效,并且似乎只是指的是C ++文件。 任何线索?
scan-build
工作通过替换CC
变量。 在你的makefile中使用它
CC=g++
all: 1.c
$(CC) -o 1 1.c
clean:
rm -f *.o 1
它的工作原理
scan-build: Using '/usr/bin/clang' for static analysis
/usr/share/clang/scan-build/ccc-analyzer -o 1 1.c
1.c:16:17: warning: Division by zero
return 5/(x-x); // warn
~^~~~~~
1 warning generated.
scan-build: 1 bugs found.
scan-build: Run 'scan-view /tmp/scan-build-2016-07-11-160529-5951-1' to examine bug reports.
链接地址: http://www.djcxy.com/p/35205.html