C++/autoconf 等效于文档库要求.txt的要求是什么?

What is the C++/autoconf equivalent to requirements.txt for documenting library requirements?

本文关键字:txt 是什么 文档 autoconf 于文档 C++      更新时间:2023-10-16

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

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

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已正确对它们进行了依赖项测试(并且通常没有与系统相关的依赖项(。