【问题标题】:What is the C++/autoconf equivalent to requirements.txt for documenting library requirements?用于记录库要求的 C++/autoconf 等效于 requirements.txt 是什么?
【发布时间】:2020-06-28 17:01:45
【问题描述】:

我有一个使用 autoconf 的 C++ 库,我已经维护了 15 年。我现在让它与 CI 一起运行,并且发现我需要更好地记录它的要求。在 python 程序中,我使用名为 requirements.txt 的文件来执行此操作,setuptools 在打包期间使用该文件,我也可以在 CI 系统中使用。在 C++ 自动工具包中记录此内容的正确方法是什么?

【问题讨论】:

  • requirements.txt 用于在 python 中安装所需的包以构建/运行代码。对于 C++,我们可以像 git clone --recursive? 一样实现这一点
  • 我无法将git clone 放入自动配置文件中。我知道requirements.txt 用于Python。我想知道如何记录 C++ 包的要求。
  • 有几个 C++ 包管理器。 Conanvcpkg 是流行的例子。
  • 找到了一些有用的资源youtube.com/watch?v=9cCQHJ-cNHY
  • C++(或 C)和 Autotools 生态系统都没有针对您描述的文档类型的特定约定。当然不是任何旨在机器可操作的东西。我想我通常希望在源代码分发中找到一个 README 文件,其中包括任何第三方要求以及可能的许多其他细节。正如其他 cmets 所建议的那样,这些需求的形式化通常是与包管理系统相关的功能,而 Autotools 则不是。

标签: c++ autotools


【解决方案1】:

这是技术作家想知道的一个问题:我们的产品有哪些包或依赖项。

在 C/C++ 中有两种依赖项,而不是单一的 Python 依赖项列表(我不是在谈论在某些 Python 包中发现的特定于测试的依赖项或那种类型)。

有:

  • 标头包含依赖项
  • 库依赖

头文件包含依赖

有一个 C/C++ 编译器选项可以列出所有非系统包含文件:

gcc -c -MMD  <source.c>

对于所有包含文件:

gcc -c -MD <source.c>

通过这些包含文件列表,您可以找到提供它的软件包,例如在 Debian 中:

dpkg-query -S <include-file.h>

库依赖

保护用于特定平台/发行版的完整库列表的最佳方法是使用ldd 提取程序在启动和运行之前需要的外部对象代码列表。

#!/bin/bash

# List Debian packages that a given executable is dependent on
BINARY_FILE=$1

LIB_LIST=$(ldd $1 | gawk '{ print $1 }' | tr '\n' ' ')

for THIS_LIB in $LIB_LIST; do
  dpkg-query -S $THIS_LIB
done

/bin/ls 的输出结果为您提供了ls 可执行文件所依赖的包的多平台列表:

~/bin/dpkg-dependency-by-executable.sh /bin/ls
dpkg-query: no path found matching pattern *linux-vdso.so.1*
libselinux1:amd64: /lib/x86_64-linux-gnu/libselinux.so.1
libc6-x32: /libx32/libc.so.6
libc6:amd64: /lib/x86_64-linux-gnu/libc.so.6
libc6-i386: /lib32/libc.so.6
libpcre3:amd64: /lib/x86_64-linux-gnu/libpcre.so.3
libpcre3:amd64: /lib/x86_64-linux-gnu/libpcre.so.3.13.3
libc6-i386: /lib32/libdl.so.2
libc6-x32: /libx32/libdl.so.2
libc6:amd64: /lib/x86_64-linux-gnu/libdl.so.2
libc6:amd64: /lib64/ld-linux-x86-64.so.2
libc6-i386: /lib32/libpthread.so.0
libc6-x32: /libx32/libpthread.so.0
libc6:amd64: /lib/x86_64-linux-gnu/libpthread.so.0
root#

通过这些列表,您可以确定您的 autotools 已正确地对它们进行了依赖测试(通常没有与系统相关的测试)。

【讨论】:

  • 这是一般意义上的有用建议,但仅与实际提出的问题无关。特别是,对于 OP 参与 CI 系统的兴趣,它没有(直接)帮助。在这些评论的上下文中,这个问题可能被解释为询问一旦收集到依赖信息后如何处理它。
  • 哎哟。我在持续开发中描述了 CD 系统的过程?
  • 您已经描述了发现程序依赖项的机制。 OP 正在寻求一种标准化或广泛支持的传统机制,以表示机器可操作的形式,例如 CI 系统可以读取和使用。
  • 在键入函数调用期间缺少具有出色自动标题功能的 IDE,我们需要将该功能提取到独立工具中。
  • 同样,问题不在于 机制 查找依赖项或列出它们。相反,它询问生成依赖列表的位置和格式的标准约定
猜你喜欢
  • 1970-01-01
  • 2017-01-28
  • 2010-09-25
  • 2019-04-16
  • 1970-01-01
  • 2016-08-06
  • 1970-01-01
  • 2021-01-24
相关资源
最近更新 更多