Batch file 使用CMake批量评估忍者叮当整理的返回值

Batch file 使用CMake批量评估忍者叮当整理的返回值,batch-file,cmake,llvm,ninja,clang-tidy,Batch File,Cmake,Llvm,Ninja,Clang Tidy,我正在使用CMake 3.6生成ninja 1.6.0配置,并使用clang tidy(LLVM版本3.9.1)编译和静态分析我的代码: .clangtidy文件: --- Checks: '-*,readability-*' AnalyzeTemporaryDtors: false WarningsAsErrors: '*' HeaderFilterRegex: 'src/' User: mgalos CheckOptions: - key:

我正在使用CMake 3.6生成ninja 1.6.0配置,并使用clang tidy(LLVM版本3.9.1)编译和静态分析我的代码:

.clangtidy文件:

---
Checks:          '-*,readability-*'
AnalyzeTemporaryDtors: false
WarningsAsErrors: '*'
HeaderFilterRegex: 'src/'
User:            mgalos
CheckOptions:
  - key:             readability-identifier-naming.AbstractClassCase
    value:           CamelCase
...
build.bat:

cmake -H. -B_build -GNinja -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_INSTALL_PREFIX=_build/_release -DCMAKE_BUILD_TYPE=GENERIC_RELEASE -DBoost_COMPILER=-vc100
我得到的结果是:

96警告被视为错误忍者:构建停止:子命令失败。

%errorlevel%
为0,尽管ninja明确表示子命令失败。此变量很重要,因为它由buildserver进行评估,并将生成标记为失败

如何将
%errorlevel%
正确设置为!=0?

看起来这是一个

您可以采取的缓解措施是将
cmake
的所有输出通过管道传输到一个文件,并扫描该输出中是否出现指示错误的字符串,在您的情况下,该字符串似乎是
build stopped:subcommand failed
。如果存在这种情况,只需使用任意非零退出代码退出即可

@ECHO OFF
cmake -H. -B_build -GNinja (...) > log.txt 2>&1
FOR /F %%G IN ('FINDSTR /C:"build stopped: subcommand failed" log.txt') DO EXIT /B 255

谢谢你的支持。 正如建议的那样,我最后做了一个:

ninja clang-tidy | tee clang-tidy.log
grep 'error.*generated' clang-tidy.log | cut -d" " -f4 | gawk "{if($1 != \"0\")  {print \"-1\"; exit -1}}" > clang-tidy_result.log
set /p ErrorLevel=<clang-tidy_result.log
ninja-clang-tidy | tee-clang-tidy.log
grep'错误。*生成'clang-tidy.log | cut-d”“-f4 | gawk“{if($1!=“0\”){print\”-1\“exit-1}”>clang-tidy|u result.log

set/p ErrorLevel=但如果
ErrorLevel
,则子命令将标记为失败=0
。那么如何知道它是
0
?被视为错误的
警告看起来更像
errorlevel
=0
。因此,不要将警告视为错误,在外部CMake脚本中使用
execute\u process
,使用
-k
“继续”标志调用
ninja
,或者如果您使用Jenkins的“execute Windows batch command”在末尾添加一个
退出/b0
,我真的希望将警告视为错误,因为静态分析需要遵循样式指南(在.clangtidy中指定),它将被扩展。很高兴能提供帮助!只是一个旁注:。是的。%对于评估,在批量设置变量时不存在。
ninja clang-tidy | tee clang-tidy.log
grep 'error.*generated' clang-tidy.log | cut -d" " -f4 | gawk "{if($1 != \"0\")  {print \"-1\"; exit -1}}" > clang-tidy_result.log
set /p ErrorLevel=<clang-tidy_result.log