【问题标题】:Handling nested dependencies in C++处理 C++ 中的嵌套依赖项
【发布时间】:2021-03-01 22:19:14
【问题描述】:

我是 C++ 编程新手,我的背景是前端领域的 react。

我已经开始了一个带有微控制器的副项目,但我在理解如何使用 C++ 处理依赖项时遇到了一些问题。在 react 中,我们只需要使用包管理器,例如 Npm 或 Yarn。

我的问题是我的main.c 文件包含#include <NewSoftSerial.h>,我已从https://www.pjrc.com/teensy/td_libs_NewSoftSerial.html 外部下载并手动添加到我的项目文件夹中。

但是newSoftSerial 本身有它自己的一组 `#includes',它们不在我的项目文件夹中,因此我的构建没有成功编译。

是否期望开发人员必须手动寻找所有嵌套的依赖项并手动添加它们?有没有更简单的方法?

【问题讨论】:

  • 没有像 C/C++ 这样的东西。 C 和 C++ 是两种不同的语言。你不应该同时学习两者。 “预计开发人员必须手动寻找所有嵌套的依赖项并手动添加它们吗?有没有更简单的方法?”你可能知道npm和yarn。在 C 世界中,有像 vcpkgConan 这样的包管理器。根据您的操作系统,还有适用于您系统的软件包管理器,例如 brew (Mac)、apt (Ubuntu)、pacman (Arch Linux)、dnf (CentOS / RHEL / Fedora)...
  • 找不到什么文件?
  • 天上有多少星星,这个问题就有多少答案。一般来说,当您为微控制器编写代码时,您的操作系统的包管理器不会为您提供帮助。最简单的答案是肯定的,您必须自己识别所有依赖项并以某种方式使它们可用。我个人更喜欢使用 git 子模块来做到这一点:git-scm.com/book/en/v2/Git-Tools-Submodules
  • @appleapple Print.h
  • @TomV 我想可能是这样,我来看看 git sub modules

标签: c++ dependencies microcontroller mplab


【解决方案1】:

欢迎来到嵌入式开发。是的,这就是大多数外部库的添加方式。您不仅需要找到并添加它们,还可以阅读自述文件并遵循集成说明(如果有的话;通常您只需要自己弄清楚)。此外,还有不同的流行的不兼容的构建系统(通常是 make 和 CMake)——如果依赖项不支持你的项目中的构建系统或者期望以不同的方式使用它——好吧,有时最好找到另一个库:)。真正有用的库由单个 .c 和 .h 文件组成,没有第三方依赖项,您只需将其拉入构建系统即可。不出所料,嵌入式开发人员倾向于从头开始编写东西以避免依赖恐惧。

再一次,依赖项往往不会嵌套(至少对于好的库而言)。在引入具有任何第三方依赖项的库之前,我会考虑很久。

在您的情况下,具体而言,库(同样没有任何集成文档)需要一个 Arduino 项目,而您似乎使用的是 Microchip 的 MPLab,这是一个完全不同的环境。除了在 Arduino 中创建项目(如果那里支持您的硬件)之外,确实没有解决这种冲突的好方法;或寻找另一个图书馆;或自己编写所需的功能。

【讨论】:

  • Arduino 的好处是它只是带有 Makefile 的 GCC,即使是初学者也可以分析发生了什么。将 Arduino 项目转换为 C++/Makefile 项目非常简单。
  • 嗯,Arduino 在很多方面对初学者都有好处——如果你能接受它的局限性的话。至于将 Arduino 草图转换为 Makefile 项目——这实际上是我在 5 或 6 年前尝试过的,但惨遭失败。 Arduino 库隐藏在幕后某处(当然没有记录),无论我尝试什么,我都找不到并链接它们。
猜你喜欢
  • 1970-01-01
  • 2022-12-15
  • 2013-03-21
  • 2010-11-28
  • 2012-03-29
  • 2022-01-26
  • 2020-06-24
  • 1970-01-01
  • 2018-06-14
相关资源
最近更新 更多