我正在使用LLVM3.6生成一个CMake 1.6.0配置,使用clang-tidy (LLVM3.9.1版)编译和静态分析我的代码:
# file copied from http://www.labri.fr/perso/fleury/posts/programming/using-clang-tidy-and-clang-format.html
# Additional targets to perform clang-format/clang-tidy
# Get all project files
file(GLOB_RECURSE
ALL_CXX_SOURCE_FILES
*.[chi]pp *.[chi]xx *.cc *.hh *.ii *.[CHI]
)
# Adding clang-tidy target if executable is found
find_program(CLANG_TIDY "clang-tidy")
if(CLANG_TIDY)
add_custom_target(
clang-tidy
COMMAND clang-tidy
${ALL_CXX_SOURCE_FILES}
--
-std=c++11
${INCLUDE_DIRECTORIES}
)
endif().clang-整齐文件:
---
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 warnings treated as errors ninja: build stopped: subcommand failed.
%errorlevel%是0,尽管忍者清楚地表示子命令失败。这个变量很重要,因为它是由buildserver评估的,并且会将构建标记为失败。
如何才能将%errorlevel%正确设置为!= 0?
发布于 2017-02-10 17:08:28
看起来这是个known problem。
您可以做的是将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发布于 2017-02-10 18:06:14
谢谢您一直鼓励我。正如我所建议的,我最终做了一个:
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.loghttps://stackoverflow.com/questions/42154468
复制相似问题