国内镜像:https://git.code.tencent.com/Tencent_Open_Source/CodeAnalysis 工具介绍 ▼ include-what-you-use(简称IWYU 该json包含了每个文件的CXXFLAGS,IWYU可通过该json对项目进行扫描分析 工具接入 ▼ 添加规则:进入页面,点击方案->规则配置 -> 自定义规则包-> 添加规则 ->搜索所属工具
None # 每行字符的限制,0表示没有限制 ColumnLimit: 100 # 描述具有特殊意义的注释的正则表达式,它不应该被分割为多行或以其它方式改变 CommentPragmas: '^ IWYU
BreakAfterJavaFieldAnnotations: false BreakStringLiterals: true ColumnLimit: 130 CommentPragmas: '^ IWYU
ftxui_set_options.cmake inflating: FTXUI-master/cmake/ftxui_test.cmake inflating: FTXUI-master/cmake/iwyu.cmake ftxui/util/autoreset.hpp inflating: FTXUI-master/include/ftxui/util/ref.hpp inflating: FTXUI-master/iwyu.imp creating: FTXUI-master/tools/ inflating: FTXUI-master/tools/format.sh inflating: FTXUI-master/tools/iwyu.sh examples include LICENSE src cmake doc ftxui-config.cmake.in iwyu.imp
可以使用IWYU(include-what-you-use)来做,它的主要功能是去分析头文件中的每个include是否必要,然后将不必要的引用替换掉从而提升编译速度。 由于直播模块只是优化了top10便效果很明显了,所以没有进一步用IWYU去处理。 PS:关于火焰图以及IWYU等工具的使用可以参考yangyang大神的文章,这里就不班门弄斧介绍了(https://cloud.tencent.com/developer/article/1564372
Unfortunately, Chromium lacks include-what-you-use (“IWYU”) support, so there’s no tooling to do this
lines 2-2 The full include-list for main.c: #include "HeaderA.h" // for StructA struct StructB; 我们在 IWYU 基础上,增加了 ObjC 语言的支持,并增强它的逻辑,让结果更好看(通常 IWYU 处理完后,会引入很多头文件和前置声明,我们做剪枝处理,进一步去掉多余的头文件和前置声明,篇幅限制就不多做解释了)。
lines 2-2 The full include-list for main.c: #include "HeaderA.h" // for StructA struct StructB; 我们在 IWYU 基础上,增加了 ObjC 语言的支持,并增强它的逻辑,让结果更好看(通常 IWYU 处理完后,会引入很多头文件和前置声明,我们做剪枝处理,进一步去掉多余的头文件和前置声明,篇幅限制就不多做解释了)。
2-2 The full include-list formain.c: #include "HeaderA.h" // for StructA struct StructB; 我们在 IWYU 基础上,增加了 ObjC 语言的支持,并增强它的逻辑,让结果更好看(通常 IWYU 处理完后,会引入很多头文件和前置声明,我们做剪枝处理,进一步去掉多余的头文件和前置声明,篇幅限制就不多做解释了)。
unneeded includes in source code (external tool)" OFF) if (USE_INCLUDE_WHAT_YOU_USE) find_program(IWYU_PATH NAMES include-what-you-use iwyu) if (NOT IWYU_PATH) message(FATAL_ERROR "Could not find
TargetFolderName = TargetName; switch (IntermediateEnvironment) { case UnrealIntermediateEnvironment.IWYU : TargetFolderName += "IWYU"; break; case UnrealIntermediateEnvironment.NonUnity
compile_commands.json的路径,关键是--compile-commands-dir,其它根据需求配置:"clangd.arguments": [ // 补充头文件的形式,默认为iwyu
analysis-tools-dev/static-analysis#cpp CMake 中内置静态检查器的支持: blog.kitware.com/static-checks-with-cmake-cdash-iwyu-clang-tidy-lwyu-cpplint-and-cppcheck