Tensorflow编译相关

clang 编译器:

clang是LLVM编译器工具集的一个用于编译C、C++、Objective-C的前端。LLVM项目的目标是提供一个GNU编译器套装(gcc)的替代品,由苹果公司的赞助开发,其源代码授权采用的是类BSD的伊利诺伊大学厄巴纳-香槟分校开源码许可。

相比于gcc,clang 具有如下优势:

  • 编译速度更快:在某些平台上,clang 的编译速度要明显快于gcc。
  • 占用内存更小:clang生成的AST所占用的内存通常是gcc的五分之一左右。
  • 模块化的设计:clang采用基于库的模块化设计,更易于IDE的集成及其他用途的重用。
  • 诊断信息可读性强:在编译过程中,clang会创建并保留大量详细的元数据 (metadata),这将更有利于调试和错误报告。
  • 设计更清晰简单,容易理解,易于扩展加强。与代码基础较为古老的gcc相比,学习曲线会显得更为平缓。

clang-tidy介绍

clang-tidy是一个基于clang的静态代码分析框架,支持C++/C/Objective-C。

它是一个功能更强大的lint工具。绝大部分lint工具只能在出现问题的代码地方给出提示,之后需要人为修改,而clang-tidy则能够自动修复功能(当然这个如何修复需要该check作者提供);并且clang-tidy采用模块化设计,非常容易扩展。如果用户想往clang-tidy添加一个新的检测功能,只需要编写一个clang-tidy check实现(如何编写一个clang-tidy check以后将会有一章详细介绍),每一个check检测一种问题,例如检测某个违反Code style的模式,检测某些API不正确使用的方法等等。
clang-tidy check可以检测各式各样的问题:

  • 检测违反代码规范的代码模式(header guard不满足,include头文件顺序错误);
  • 找出不容易在编译时发现的代码错误(把int赋值给std::string, 变量定义在头文件);
  • 把deprecated的API替换成新的API,modernize模块典型例子,把C++03的代码自动转换成C++11的代码(for-range-loop, auto, nullptr, overriede, default);

Bazel :

猜你喜欢

转载自blog.csdn.net/transMaple/article/details/81022729