【发布时间】:2017-02-10 08:11:34
【问题描述】:
我正在使用 CMake 3.6 生成 ninja 1.6.0 配置,使用 clang-tidy(LLVM 版本 3.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-tidy 文件:
---
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,尽管 ninja 明确表示子命令失败。这个变量很重要,因为它由构建服务器评估,并将构建标记为失败。
如何将%errorlevel% 正确设置为 != 0?
【问题讨论】:
-
但是如果
errorlevel是!=0,子命令将被标记为失败。那你怎么知道是0? -
warnings treated as errors看起来更像errorlevel是!=0。所以要么不要将警告视为错误,在外部 CMake 脚本中使用execute_process,使用-k“继续前进”标志调用ninja,或者如果你例如使用 Jenkins“执行 Windows 批处理命令”在末尾添加EXIT /B 0。 -
弗洛里安,我真的很想将警告视为错误,因为静态分析需要遵守样式指南(在 .clang-tidy 中指定),它将被扩展。
标签: batch-file cmake llvm ninja clang-tidy