我做了一个非常简单的C文件,只是为了在使用C代码时测试sonarcloud的输出。我的整个代码是:
#include <stdio.h>
#include <stdlib.h>
int main() {
int i;
for(int j = 0; j < 100; j++) {
void* unreleasedMemory = malloc(1024);
printf("Address: %p\n", unreleasedMemory);
}
printf("Uninitialized i is: %d", i);
return 0;
}
当我在sonarcloud上启动一个新项目时,发出这样的build-wrapper和sonar-scanner命令:
build-wrapper-macosx-x86 --out-dir bw-output cmake .
之后:
sonar-scanner \
-Dsonar.projectKey=ctest \
-Dsonar.organization=<orgname> \
-Dsonar.sources=. \
-Dsonar.cfamily.build-wrapper-output=bw-output \
-Dsonar.host.url=https://sonarcloud.io \
-Dsonar.login=<tokenvalue>
两个参数的输出看起来都很好。不幸的是,它没有检测到这些相当明显的错误:
我做错了什么,所以sonarcloud会接他们?
答案 0 :(得分:3)
引用https://docs.sonarqube.org/display/PLUG/Building+on+Mac+OS+X:
将Build Wrapper的执行添加为用于构建项目的常用构建命令的前缀(下面的示例使用xcodebuild,但执行完整构建的任何构建工具< / strong>可以使用)
换句话说:必须在执行build-wrapper
期间编译应分析的所有文件。这是必需的,因为build-wrapper
监视编译器调用以收集有关在项目中编译哪些文件以及使用哪些选项的信息,然后在执行sonar-scanner
期间将此信息用于分析。
我严重怀疑你执行cmake .
执行main.c
的编译 - 它只是生成make文件,因此这就是main.c
实际上没有被正确分析的原因。
执行
cmake .
build-wrapper-macosx-x86 --out-dir bw-output make clean all
然后执行带有sonar-scanner
的{{1}}会产生所需的结果: