C++/autoconf 等效于文档库要求.txt的要求是什么?
What is the C++/autoconf equivalent to requirements.txt for documenting library requirements?
我有一个使用自动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
已正确对它们进行了依赖项测试(并且通常没有与系统相关的依赖项(。
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- C++避免重复声明的语法是什么
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- C++从另一个类访问公共静态向量的正确方法是什么
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- C++中名称篡改的目的是什么
- 在 c++ 中拥有一组结构的正确方法是什么?
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 是什么阻止DOMTimerCoordinator::NextID进入无休止的循环
- 派生类销毁的最佳实践是什么
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 通过JNI传递数据数组的最快方法是什么
- "using namespace std;"在C++的作用是什么?
- 在两台机器之间进行时间戳的最佳c++chrono函数是什么
- 文件系统:复制功能的速度秘诀是什么
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 使用QQuickFramebufferObject时同步数据的最佳方式是什么
- C++/autoconf 等效于文档库要求.txt的要求是什么?
- 通过比较C++中的行在 txt 文件中搜索的最简单方法是什么?