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

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

源码管理 对于任何软件开发项目来说,源码管理都是绝对必要,如果还没有,那就开始使用。 GitHub[5] —— 允许无限制公共存储私有存储,支持最多3个协作者。...管理器 build2[25] —— 类CargoC++包管理器 Buckaroo[26] —— 真正去中心化跨平台依赖管理器,适用于C/C++等等 Vcpkg[27] —— 微软C++管理器,...更改被推送到存储时会触发持续集成(CI)工具自动构建源代码,可以私有部署CI工具或使用托管CI系统。...关于如何基于C++ cmake应用程序启用简单示例,请参考: https://github.com/ChaiScript/ChaiScript/blob/master/.travis.yml 启用覆盖工具...基于LLVM工具 基于LLVM工具与能够输出编译命令数据构建系统(例如cmake)配合得最好,例如: $ cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON .

3.3K10

面向 C++ 现代 CMake 教程(二)

最后,本部分将涵盖 CMake 提供管理依赖关系所有不同方式,并解释如何为您特定用例选择最佳方法。...这些都是伪目标,或者没有包含在生成构建系统目标。 导入目标 如果你浏览了目录,你知道我们将讨论 CMake 如何管理外部依赖项——其他项目、等等。...本章,我们不仅讨论了构成目标以及目标如何相互依赖,还学习了如何使用 Graphviz 模块图表呈现这些信息。有了这个基本了解,我们能够学习目标的关键特性——属性(各种各样属性)。...这是从 ASCII 源代码到可被处理器处理二进制对象文件转换。 每个阶段都具有重要意义,可以根据我们特定需求进行配置。让我们看看如何使用 CMake 管理这个过程。...单元测试私有类字段时常见陷阱 一些在线资源建议单元测试中使用特定-D定义与#ifdef/ifndef指令组合。

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

面向 C++ 现代 CMake 教程(三)

这是我们示例情况(CMake 将在可执行目标的对象文件之前放置): 我们处理了main.o,发现了一个对a未定义引用,并将其收集以供以后解决。...现在我们已经知道了如何链接,我们可以检索外部并将其用于我们 CMake 项目中。在下一章,我们将学习如何CMake 管理依赖关系。...: 依赖地狱 模块与共享区别: 模块与共享区别 第七章:使用 CMake 管理依赖解决方案是大型还是小型,并不重要;随着它成熟,你最终会决定引入外部依赖。...幸运是,CMake 适应不同风格和依赖管理历史方法同时,还能跟上行业批准标准不断演变。...总结 当我们使用现代、得到良好支持项目时,管理依赖关系并不复杂。大多数情况下,我们只需依赖系统中有可用,如果没有就回退到FetchContent。

23100

CMake 秘籍(五)

Boost 使用超级构建管理依赖:II. FFTW 使用超级构建管理依赖:III....ExternalProject和FetchContent是 CMake 工具箱两个非常强大工具。之前示例应该已经说服了您超级构建方法管理具有复杂依赖关系项目方面的多功能性。...CMake 如何确定目标的链接器语言?对于不混合编程语言目标,选择很简单:通过用于生成对象文件编译器命令调用链接器。...如果目标确实混合了编程语言,如我们示例,链接器语言选择基于语言混合偏好值最高那个。...与前一个示例相比,我们将展示如何在配置时获取 pybind11 依赖项,并使用我们第四章,创建和运行测试,示例 3,定义单元测试并与 Google Test 链接遇到 FetchContent 方法构建我们项目

42920

CMake基础

可以自动检测源文件和头文件之间依赖关系,导出到 Makefile 里 CMake 具有相对高级语法,内置函数能够处理 configure,install 等常见需求 不同编译器有不同 flag...,我们之后会讨论如何使用他人 windows静态是以.lib 为后缀文件,动态是以.dll 为后缀文件 linux静态是以.a 为后缀文件,动态是以.so为后缀文件 创建以后,...含义稍后会说明(CMake 中有很多这样大写修饰符) 4.CMake子模块 复杂工程,我们需要划分子模块,通常一个一个目录,比如: 这里我们把 hellolib 东西移到 hellolib.../glfw - OpenGL 窗口和上下文管理 10.libigl/libigl - 各种图形学算法大合集 引用系统预安装第三方: 可以通过 find_package 命令寻找系统包/: find_package...,而包管理作者为 find_package 编写脚本(例如/usr/lib/cmake/TBB/TBBConfig.cmake)能够自动查找所有依赖,并利用刚刚提到 PUBLIC PRIVATE

1.9K20

推荐一款嵌入式Linux开源框架与封装-cpp-tbox

全称: C++ Treasure Box,C++百宝箱,是一个基于 Reactor 模式服务型 开发框架 与 组件,旨在让C++开发变得轻松。...具有类Shell命令终端 可以与运行服务通过telnet进行交互,令其打印内部数据,或是执行特定动作。这极大地降低了调试难度。 shell交互示例 4....有丰富开发组件 名 中文名 说明 base 基础 含日志打印、常用工具等 util 工具 在业务代码可能会用到 event 事件 实现了IO,Timer,Signal三种事件驱动,是整个框架心脏.../usr/local): cmake -B build -DCMAKE_INSTALL_PREFIX=$HOME/.tbox 使用教程 关于如何使用 cpp-tbox 开发自己程序,详见教程: cpp-tbox-tutorials...依赖模块 必需 说明 安装方法 libgtest-dev 所有 否 单元测试用 sudo apt install libgtest-dev libgmock-dev 所有 否 单元测试用 sudo

28210

设计原则与设计模式

一些侧面的判断指标更具有指导意义和可执行性 类代码行数、函数或者属性过多; 类依赖其他类过多,或者依赖其他类过多; 私有方法过多; 比较难给类起一个合适名字; 类中大量方法都是集中操作类某几个属性...依赖注入框架:提供扩展点,简单配置一下所有需要类及其类与类之间依赖关系,就可以实现由框架来自动创建对象管理对象生命周期、依赖注入等原本需要程序员来做事情。...合理地划分代码可以实现代高内聚、低耦合,类与类之间交互简单清晰,代码整体结构一了然。类比面向对象设计,系统设计实际上就是将合适功能放到合适模块。...单元测试作用: 写单元测试过程本身就是代码 Code Review 和重构过程,能有效地发现代 bug和代码设计上问题。...实际 设计原则都以实现代“高内聚、松耦合”为目的。 单一职责原则 基于接口而非实现编程 依赖注入 多用组合少用继承 迪米特法则 20条编程规范 命名 命名关键是能准确达意。

71440

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

第四章,使用目标工作: 在这里,我们强调了现代 CMake 项目如何广泛使用目标。我们项目也将如此,以下原因是: 定义几个和可执行文件(用于测试和生产)将使项目保持组织性并保持干燥....第七章,使用 CMake 管理依赖关系: 为了使项目更有趣,我们将引入一个外部依赖项:一个文本 UI 。我们在这一章描述了几种依赖管理方法。...对象 对象用于将多个源文件组合到一个单一逻辑目标,并在构建过程编译成(.o)目标文件。...另外,您可以使用target_link_libraries()命令将它们作为依赖项添加。 我们Calc对象将有助于避免为静态和共享版本重复编译源。...方法,第七章,《使用 CMake 管理依赖项》中有详细描述。

7200

跨平台协程 - libcopp 简介

因为我觉得现代C++很多工具对我们排除一些初级错误很有帮助(比如 static_assert ),所以实现 libcopp 过程,我们是会检测环境并且尽可能地使用 C++ 一些新特性来优化性能或是规避问题...唯一ID分配 、 超时管理 、 await语义 、 自定义参数 关联和分配等等),还包含一个 task_manager 用于基于ID统一管理和提供超时管理。...但是 libcopp 应用还是使用对称式 ,而且对称式理解和管理起来更方便,所以 libcopp 还是还原了对称式做法。...vcpkg vcpkg 是 Microsoft 开发一个C++跨平台包管理工具,整个系统也是基于 cmake ,很容易就可以支持了。...单元测试和压力测试 libcopp 里使用是一个自己实现轻量级单元测试框架,这样可以提供基本测试功能并减少依赖

3.2K10

Linux平台:Alexa语音服务快速入门指南

快速设置你树莓派开发环境和学习如何优化libcurl大小,参见wiki或click here 列表 通用条款 最低要求和依赖环境 前提 创建源代码外部构建 运行AuthServer 运行单元测试 运行集成测试.../alexa-rpi/include 请注意,在运行cmake并将其构建到SDK之前,你可能需要授权Sensory,可以Sensory Github页面下发现一个授权Sensory脚本bin/license.sh...,它不是亚马逊提供.注意:根据Alexa Voice Service Agreement 包含在仓库音频资料被授权”Alexa Materials” 运行AuthServer 创建外部构建目录之后...,第二个是只有构建具有唤醒词支持示例程序才需要,并且是包含唤醒词模型文件夹路径....资源和指南 逐步说明*nix系统优化liburl大小 逐步说明使用mbed TLS和nghttp2*nix系统构建libcurl

2K20

C++ 资源大全:标准、Web框架、人工智能等 | 最全整理

FiberTaskingLib: 基于任务多线程,支持具有任意依赖关系任务图表。 HPX: 适用于任何规模并行分布式应用通用C++运行时系统。...CUTE: 更容易C++单元测试。 CMocka: 支持模拟对象C单元测试框架。 CppUnit: 由JUnit移植过来C++测试框架。 CTest: CMake测试驱动程序。...microprofile: 跨平台网络视图分析器。 minUnit: 使用C写最小单元测试框架,包含在单个头文件。 Mockator: 用于C++缝合和模拟对象Eclipse CDT插件。...Biicode: 基于文件简单依赖管理器。 CMake: 跨平台免费开源软件用于管理软件使用独立编译方法进行构建过程。 Cget: Cmake软件包检索。...Conan: C / C++程序包管理器,开源。 CPM: 基于CMake和GitC++包管理器。 FASTBuild: 高性能,开源构建系统,支持高度可扩展性编译,缓冲和网络分布。

12800

CMake打包以及支持find_package

对于、示例和单元测试,每个模块分别拥有自己CMakeLists.txt,在其中定义了编译目标并且子目录包含了相关代码。...注意头文件路径变量header_path,这个变量不同CMake子文件是不同,而源文件因为同一目录,则可以直接定义。...对于工具tool,我们假设其能够具有很好兼容性,并且将其直接放到bin/文件夹,这样其能够直接在终端运行,如果你有需求,你应该对这部分做一些自定义调整。...config_impl.hpp和标的路径,将其安装到lib_dest,这样对于不同编译类型(也就是不同配置),我们就会得到不同config_impl.hpp和文件。...总结总结来看,为了CMake中支持安装和find_package(),我们需要:改变标的target_include_directories(),使用$和$

29200

学习单元测试,告别祈祷式编程

目的: 通常用单元测试来验证代码逻辑是否符合预期。完整可靠单元测试是代码安全网,可以代码修改或重构时验证业务逻辑是否正确,提前发现代码错误,减少调试时间。...然后在这个子集基础上针对边界值做一些检查,比如36000、144000 等。 私有方法如何测试 通常情况下,如果私有方法公有方法中有被调用,通过测试公有方法就已经可以间接测试到私有方法。...外部服务如何测试 当然现实世界代码并不会这么简单,通常都会包含外部请求或者对于其它类调用。在编写单元测试时,对于外部依赖我们通常使用Mock和Stub方式来模拟外部依赖。...Mock和Stub 区别: ? Mock是测试代码创建一个模拟对象,模拟被测方法执行。测试使用模拟对象来验证结果是否正确 ?...第二种就是stub 方式。 如果外部依赖是数据,可以考虑使用内存数据,存储测试数据来代替数据来进行测试。通过这个例子我们也可以看到,如果想要代码容易测试,代码设计时就应该考虑可测试性。

54930

CMake 秘籍(三)

本食谱,我们将演示如何使用 CMake 和 Google Test 框架实现单元测试。与之前食谱不同,Google Test 框架不仅仅是一个头文件;它是一个包含多个需要构建和链接文件。...本示例,我们只对gtest_main目标感兴趣,作为单元测试示例依赖项: target_link_libraries(cpp_test PRIVATE sum_integers...Boost 测试是 C++社区另一个非常流行单元测试框架,本示例,我们将演示如何使用 Boost 测试对我们熟悉求和示例代码进行单元测试。...还有更多内容 本节,我们假设 Boost 已安装在系统上。或者,我们可以在编译时获取并构建 Boost 依赖项(请参阅第八章,超级构建模式,第二部分,使用超级构建管理依赖项:I....这意味着尝试找出哪些功能有效,哪些无效,并相应地调整项目的编译,无论是通过发出依赖项未满足信号,还是我们代码启用适当变通方法。接下来几个食谱将展示如何使用 CMake 执行这些操作。

44020

CMake 秘籍(六)

为什么我们选择这种方法而不是第 3 个菜谱展示使用OBJECT方法,即“构建和链接静态和共享”,第一章“从简单可执行文件到?OBJECT负责编译第一步:从源代码到对象文件。...我们示例message取得了巨大成功,许多其他程序员都在使用它,并且非常满意。您也想在自己项目中使用它,但不确定如何正确管理依赖关系。...这包含管理我们上游依赖 CMake 指令,我们例子,是message: add_subdirectory(external/upstream) 然后我们包含ExternalProject.cmake...它允许我们通过将它们分成更小、更易于管理子项目来管理复杂项目。此外,我们可以将 CMake 用作项目构建管理器。CMake 可以搜索我们依赖项,如果它们系统上找不到,可以为我们新构建它们。...本食谱,我们将基于前一个食谱发现,为示例 CMake 项目准备一个更真实、更复杂 Conda 包,该项目将依赖于并利用 Intel 数学内核(MKL)中提供 DGEMM 函数实现,用于矩阵乘法

18300

protobuf v22和gRPC v1.55版本升级依赖变化和upb适配

另外对构建流程影响就是,我 cmake-toolset 把 abseil-cpp 单独抽离出来并放在了 protobuf 之前了。...同时我们UE工程里依赖protobuf位置也要链接 abseil-cpp 相关依赖,比如 absl_strings, absl_bad_variant_access 等等。...之前版本,几乎是手夯了这几个工具及依赖构建流程。然后由于依赖中有直接源码引入第三方 utf8_range,并且文件位置相当随意。...另外由于原有导出 cmake 工程文件不支持导出现代cmake CONFIGpackage文件,所以也需要我们自己做支持来实现更好依赖关系管理。...新版本 protobuf 和 gRPC ,protobuf 开启单元测试时也依赖 utf8_range 了,但是我们出预编译包可以不开启单元测试

1K50

Maven项目管理

基于项目对象模型(POM)概念,Maven可以从一个中心信息片段管理项目的构建、报告和文档 Maven 是⼀个项目管理工具, 通过 pom.xml文件配置获取 jar包,而不用手动去添加 jar...比如 A 依赖 B, B依赖C, 那么 A项目引入 B 同时, 也需要引入C, 如果我们手动管理这个依赖, 这个过程就会比较麻烦, 我们需要知道每个依赖哪些, 以及这些依赖之间版本是如何关联...我们只需要在pom.xml文件, 定义直接依赖就可以了, 由于 maven 依赖具有传递性,所以会自动把所依赖其他jar包也⼀起导入 如上图, 项目A 通过Maven 引入 Jar A 时...当我们pom.xml文件配置完依赖之后, 点击刷新, Maven会根据坐标的配置, 去仓库里寻找 jar包, 并把他下载下来, 添加到项目中. 这个jar包下载地方就称为仓库....其中远程仓库又分为中央仓库, 私服 和其他公共 4.1 本地仓库 本地仓库: 自己计算机上一个目录(用来存储jar包) 当项目中引入对应依赖jar包后,首先会查找本地仓库是否有对应jar包 如果有

11810

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

现在我们可以享受我们生成 HTML 文档现代风格,并自豪地与世界分享。 摘要 本章,我们介绍了如何将 Doxygen,这个文档生成工具,添加到 CMake 项目中,并使其变得优雅。...不幸是,它也可能包含很多其他内容:全局配置、需求、具有副作用 CMake 命令、附加依赖项,以及我们可能不想在B中出现目标(如单元测试)。所以,我们不要这样做。...CMake 识别它们几个: ARCHIVE:静态(.a)和基于 Windows 系统 DLL 导入库(.lib)。 LIBRARY:共享(.so),但不包括 DLL。...这可以通过调用CMakeFindDependencyMacro助手中find_dependency()宏来实现。我们第七章中学习了如何使用它,使用 CMake 管理依赖项。...为了较低级别管理这些安装步骤,我们讨论了install()命令其他模式,包括安装文件、程序和目录以及安装过程调用脚本。 解释了如何编码安装步骤之后,我们学习了 CMake 可重用包。

27800

CC++ 构建系统,我用 xmake

XMake 是什么 XMake 是一个基于 Lua 现代化 C/C++ 构建系统。 它语法简洁易上手,对新手友好,即使完全不会 lua 也能够快速入门,并且完全无任何依赖,轻量,跨平台。...,总算是为解决 C/C++ 依赖管理迈进了很大一步。...XMake 自建包管理 XMake 跟 CMake 还有其他构建系统,最大不同点,也就是最大优势之一,就是它有完全自建管理系统,我们完全可以不依赖 vcpkg/conan,也可以快速集成依赖包,...不仅如此,我们开可以对定制化配置对自建包依赖,例如: 使用调式版本依赖包 我们可以使用 debug 版本,实现对依赖断点调试。...(Xrepo) 为了方便 XMake 自建仓库管理,以及第三方包管理使用,我们也提供了独立 Xrepo cli 命令工具,来方便管理我们依赖包 我们可以使用这个工具,快速方便完成下面的管理操作

2K20

CMake 秘籍(四)

它通常作为构建系统输入,构建系统将其转换为对象和可执行文件。...例如,CMake 可以检测操作系统和支持基于这些信息,我们可以定制构建哪些源代码,以向我们或程序最终用户提供最佳性能。...将目标尽可能靠近代码定义优点是,了解该且可能对 CMake 框架知识有限代码开发人员只需要编辑此目录文件;换句话说,依赖关系被封装了。...源代码将被编译成对象文件:既不会被归档到静态归档,也不会被链接到共享。...此外,我们也不必担心源文件target_sources列出顺序,也不必在库之间施加任何显式依赖关系!CMake 能够从源文件依赖关系推断出 Fortran 模块依赖关系。

17820
领券