首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++最佳实践 | 1. 工具

Travis CI[28] 能很好的C++一起工作 设计GitHub一起使用 GitHub公共存储库可以免费使用 AppVeyor[29] 支持Windows、MSVC和MinGW GitHub公共存储库可以免费使用...Clang静态分析器 Clang的分析程序的默认选项适用于各个平台,可以直接通过CMake使用[54],也可以通过基于llvm的工具[55]中的clang-check和clang-tidy调用。...此外,CodeChecker[56]可以作为clang静态分析前端。 clang-tidy可以通过Clang Power Tools[57]扩展轻松的和Visual Studio一起使用。...MSVC的静态分析器 可以通过/analyze命令行选项[58]启用,可以使用默认选项。...Qt Creator Qt Creator可以插入clang静态分析器。 clazy clazy[64]是基于clang的分析Qt使用情况的工具。

3.3K10
您找到你想要的搜索结果了吗?
是的
没有找到

再度优化GCC、LLVM、Clang、libc++、libc++abi等套件的构建脚本

而从LLVM 12.0开始,我转向使用 LLVM 自带的 All In One的工程 - llvm-project 了,这样就有了官方的自举构建流程。 但是这种编译方式,仍然没有完善的文档。...但是其实 Fuchsia 的组件也是缺斤少两的(比如没有 lldb ,没发布 scan-build 等),并且在Linux上的一些环境检测还有问题。...,然后基于 Fuchsia 的配置修改的内容如下: LLVM_TARGETS_TO_BUILD 改为 Native : 目前没有交叉编译需求,有了再说吧。只编译Native可以加快编译速度。...Stage2: LLVM_TARGETS_TO_BUILD=${LLVM_TARGETS_TO_BUILD}") message(STATUS "Stage2: LINUX_NATIVE_IS_64BIT...llvm-install-name-tool llvm-jitlink llvm-jitlistener llvm-link llvm-mc llvm-ml llvm-strings llvm-lto llvm-lto2 scan-build

3K40

面向 C++ 的现代 CMake 教程(四)

、IKOS、Joern、PC-Lint、Scan-Build、Vera++等等。...在构建过程中使用静态分析器不仅比手动查找和修复错误便宜得多;而且通过 CMake 很容易启用。我甚至可以说,在质量敏感的软件(即涉及除程序员以外的其他人的所有软件)中几乎没有任何理由跳过这些检查。...ClangFormat 参考手册: clang.llvm.org/docs/ClangFormat.html C++静态分析器——精选列表: github.com/analysis-tools-dev...*第一个选项意味着文档二进制文件一起提供,可供在线获取,或者(不那么优雅地)源代码一起提交到仓库中。 答案很重要,因为如果我们希望用户在构建过程中生成文档,他们需要在他们的系统中拥有这些依赖项。...在下一节中,我们将学习什么是组件以及如何将它们一起使用

27800

我用 Rust 改写了自己的C++项目:这两个语言都很折磨人!

我首先把所有的 C++ 代码都复制到新项目里,然后删掉已知词法分析无关的部分,比如分析器和 LSP 服务器。我甚至一不小心删多了代码,最后不得不重新把这些代码添了回去。...上图中使用的多数选项都有文档可查,但我还没找到有人写过加 -s 的链接。子命令 -s 将包括 Rust 标准库静态链接在内的所有调试信息全部剥离,让链接器做更少的工作,从而减少链接时间。...但有提升就是好的,所以在后续 C++ 的竞争中我们会继续使用这个速度最快的工具链。...结   论 编译时间对 Rust 而言算是问题?答案是肯定的。虽然也有一些可以加快编译速度的提示和技巧,但却没有效果非常显著的数量级改进,这让我在开发 Rust 时非常高兴。...,再用 cargo test 计时 不用 deps 的构建和测试 C++:cmake -S build -B .

1.1K20

温故知新:静态分析

静态分析在软件工程中的使用非常普遍,例如 scan-build 是 LLVM 项目提供的一种分析工具,目标是 C、 Objective-C、 C + + 和 Swift; Python 的 black或...然而,静态分析一般指的是可以编译器或构建系统一起使用的外部工具。 静态分析有着基本的限制,其局限性意味着静态分析常常局限于逼近程序的真实行为。尽管如此,一个近似值在实践中是非常有用的。...使用现有的分析框架扩展,我们可以编写自己的静态分析工具,例如,scan-build 提供了一个 API,使最终应用能够挂接到 LLVM 的内部进程,并利用 LLVM 的工具链来遍历和分析程序的语法树。...针对 C语言家族的另一个工具是 Clang scan-build,它提供了许多有用的分析,并为程序员编写自己的分析提供了一个 API。...静态分析有关的高级协议也出现了,语言服务器协议(Language Server Protocol)是一套通用的定义,标准化了分析工具文本编辑器(如 Emacs 和 VS Code)的接口,确保了分析工具可以工作流集成

26810

【转】从零开始手敲次世代游戏引擎(二)

这些工具可以根据一个叫做http://Makefile.am的模板(Makefile的区别是里面基本只写项目里的文件,因为这些文件的位置是我们自己可以控制的)自动生成Makefile。...有兴趣的可以参考 Autotools Introduction CMake是近年兴起的新秀,支持包括Windows在内的诸多平台,使用也比Auto Tools要方便不少。...\llvm\tools>svn co http://llvm.org/svn/llvm-project/cfe/trunk clang 还记得我们前面编译的main.c?...\build> 因为我们现在电脑上还只有Visual Studio所提供的编译工具,所以我们需要使用CMake工具来生成Visual Studio所需的Solution文件和Project文件,以便使用...如果需要编译x64的Release版本,请如下使用CMake): cmake -G "Visual Studio 15 2017 Win64" -DCMAKE_BUILD_TYPE=Release -Thost

1.5K20

CMake简易指南

目标编译系统cmake Google GN类似,属于meta-build(源编译)系统,有自己的交互语法,使用时需要先将自身的语法翻译成其他编译系统,这个翻译过程称之为configure(配置),在执行配置命令时可以通过...--target install步骤二编译时也可以使用目标编译系统的编译命令触发编译,需要编写跨平台编译脚本时,使用cmake --build .可以适配任何环境配置配置阶段的参数主要为以下几种:-G...编译安装执行编译时可以通过添加参数 -- 来为目标编译器添加编译选项,如:为 gcc 添加多线程编译可以添加cmake --build . -- -j8执行安装时,需要确认CMakeLists.txt... CMAKE_HOST_SYSTEM_NAME 是不同的,正因为编译环境运行环境不同,所以才叫 交叉编译变量以及内置变量为了便于阅读和维护,通常会使用变量来保存一些内容,cmake 中变量分为常规变量...ExternalProject_Add 也可以直接用于下载源代码,以源码形式添加到项目中一起编译,具体根据项目需要选择使用方式。

68850

第1章Hello world 45:对比RustJavaC++创建和运行Hello world全过程:运行第一个程序

接下来,我们一起看看艾极思是如何记录下赵可菲创建和运行Java程序Hello world,以及席双嘉创建和运行C++程序Hello world的过程,然后Rust的过程进行对比哦!如表1.1所示。...cmake -DCMAKE_BUILD_TYPE=Debug ..第四行cmake --build ....(同左)运行以下4行命令进行编译和调试构建:第一行mkdir buil第二行cd build第三行cmake ..第四行cmake --build ....(同左)运行以下4行命令进行编译和发布构建:第一行mkdir build_release第二行cd build_release第三行cmake ..第四行cmake --build ....让我们一起开始吧:环境准备:Rust:可以用rustup安装不同版本的Rust,以便在同一台电脑上开发不同Rust版本的项目。Java:可以用SDKMAN!

15353

自定义Clang命令,利用LLVM Pass实现对OC函数的静态插桩

图片那么如何自定义Clang命令,利用llvm Pass实现对函数的静态插桩,下面分为两部分,一部分是llvm Pass,另外一部分是自定义Clang的编译参数。两者合起来实现这个功能。...utils/gn/secondary/llvm/lib/Transforms/InjectArgsFuncCall/BUILD.gn 中需要添加以下声明,才会创建一个对应的静态库。...cd llvm-project// 新建一个build文件夹来生成工程mkdir build cd build// -G Xcode会cmake出来一个xcode工程,也可以选择ninjacmake -...在Xcode中应用第一步,指定使用自定义的ClangBuild Setting,在User Define新增设置成自定义Clang的地址,注意路径需要指向llvm工程里的目录,如果想要单独拷贝clang...最后对于LLVM和Clang还处于学习的过程中,希望有兴趣人一起交流学习。

2.2K191

Android FFmpeg 编译和集成(十四)

直接使用FFmpeg 因为FFmpeg是一套集录制、转换以及流化音视频的完整的跨平台解决方案,如果我们开发者想直接在自己开发的Android应用中使用ffmpeg的提供的功能,则需要引入so静态库...修改流程如下: [iegatlkmjs.png] 1.新增 cross_prefix_clang 参数 我们可以搜索 CMDLINE_SET ,可以找到以下代码,然后新增一个命令行选项:cross_prefix_clang...chmod +x build_android_clang.sh 5.脚本执行 添加脚本权限之后,我们可以直接运行脚本。 ....CMakeLists.txt文件是cmake脚本配置文件,cmake会根据该脚本文件中的指令去编译相关的C/C++源文件,并将编译后产物生成共享库或静态块,然后Gradle将其打包到APK中。...${log-lib} ) 5.验证使用 FFmpeg 要检查 FFmpeg 是否可以使用可以通过获取 FFmpeg 基础信息来验证。

9.3K82

Android NDK开发扫盲及最新CMake的编译使用

即由 arguments 中的参数最后转化成一个可执行的 CMake 的命令,可以在 .externalNativeBuild/cmake/debug/{abi}/cmake_build_command.txt...同时在这推荐一个中文翻译的简易的CMake手册 2.2 CMake 使用自己及其他预建的库 当你需要引入已有的静态库/动态库(FFMpeg)或者自己编译核心部分并提供出去时就需要考虑如何在 CMake...(其实官方文档中大部分都是的,并没有使用 CMake) 幸运的是, Github上的官方示例 里面有个项目 hello-libs 实现了如何创建出静态库/动态库,并引用它。...另一个参数 -DANDROID_TOOLCHAIN=clangCMake 一共有2种编译工具链 - clang 和 gcc,gcc 已经废弃,clang 是默认的。...以上就是一个静态库/动态库的编译过程。总结以下3点 编译静态库/动态库 修改输出路径 复制暴露的头文件 接着,我们看下 app 模块是如何使用预建好的静态库/动态库的。

2.1K30

面向 C++ 的现代 CMake 教程(五)

在本例中,我们将选择 Cppcheck,因为 Clang-Tidy 使用 GCC 生成的预编译头配合不佳。...共享库静态库 我们在第六章中简要介绍了这两种库,使用 CMake 链接。我们提到,总体内存使用对于使用相同共享库的多个程序可能更有利,并且用户可能已经拥有最流行的库,或者知道如何快速安装它们。...测试程序分析 程序分析测试相辅相成,确保我们解决方案的质量。例如,当使用测试代码时,运行 Valgrind 变得更加一致。为此,我们将配置这两件事在一起。...还需要向这些文件添加什么?启用静态分析的说明! 添加静态分析工具 我们将业务代码列表文件的继续推迟到现在,这样我们就可以在适当的情况下讨论添加的模块。...第九章,程序分析工具,让我们了解了不同的分析工具:格式化器和静态检查器(Clang-Tidy,Cppcheck 等),并解释了如何添加 Valgrind 套件中的 Memcheck 内存分析器

7100

cmake交叉编译到iOS和Android

唯一要注意的是,iOS不允许使用动态库,所以只能用静态库的话要加-fPIC参数。比如 -DCMAKE_C_FLAGS="-fPIC" -DCMAKE_CXX_FLAGS="-fPIC" 就完事了。...然后编译几个不同架构的.a,最后用*lipo*打包到一起就行了。 比如,我的atsf4g-co里可以用mbedtls来加解密,但是mbedtls只有cmake文件,并没有编译iOS版本的文档。...就可以通过上面的命令编译打包静态库。...另外Android这个工具链还允许我们选择用哪个STL库(ANDROID_STL选项)、设置NDK目录(ANDROID_NDK选项)和设置使用gcc还是clang(ANDROID_TOOLCHAIN选项...不过使用Android这个文件指定工具链的时候有一个问题,android.toolchain.cmake指定了只从sysroot来获取include目录和库目录,也就是说很多module里可以指定库的搜索目录在

3.5K10
领券