[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: 哪里可以找到 Debian 包的 Build Options ?



在 2020-06-13星期六的 17:44 +0800,Liang Guo写道:
> On Sat, Jun 13, 2020 at 5:23 PM Offline <resation@gmail.com> wrote:
> > 
> >   Debian 包都提供了相应的源代码,一般有一个 orig 上游压缩包,还有一个
> > Debian 自身的补丁包。但哪怕在补丁包里也找不到 Build Options. 除了极少数
> > 微型软件,大多数软件都提供 Build 开关. Autotools, CMake, Meson 都如此。
> > 如果我想知道一个 Debian 包打开了哪些 Build 选项,又关闭了哪些选项。该从
> > 何处知道呢?难道 Debian 不提供这类信息?
> > 
> 在debian/rules文件中写的,如果这个文件没有写,就是用默认参数进行编译的,实际编译时使用的选项可以看这个包的编译日志,以ocse
> rv[1]
> 为例, 查看其buildd log , 并选择对应的架构,就可以看到buildd编译的日志[3] ,进而找到对应的编译选项。
> 
> [1] https://tracker.debian.org/pkg/ocserv
> [2] https://buildd.debian.org/status/package.php?p=ocserv
> [3] 
> https://buildd.debian.org/status/fetch.php?pkg=ocserv&arch=amd64&ver=0.12.6-1&stamp=1579426930&raw=0

对 C/C++ 程序来说,实际上大概可以分三层来看:

1. Debian 默认的编译 flag 可以用 dpkg-buildflags(1) 工具查看[4]。请注意对于不同的 Debian
版本,由于该版本发行时 Debian 所采纳的政策不同,默认启用的 flag 也是不同的,拿新版工具得到的 flag
可能与软件包构建时实际使用的 flag 有出入。请以构建当时所使用的 dpkg-buildflags 工具的实际输出为准。该工具存在于
dpkg-dev 软件包中。请注意默认 flag 还会受到 DEB_BUILD_* 环境变量的影响,详情请读 [4] 的 FEATURE
AREAS 一节。

2. 在此基础上,软件包打包者有可能因个人原因对特定的硬件架构或者特定的软件调整构建
flag(增加/删除/改变等级)。调整的具体原因是非常多样化的,从避免
bug、优化编译结果到个人偏好(最后一个原因常常是有害的)这些情况我都在 Debian 现有的软件中见过。在此情况下,除了如 Liang
Guo 所述的深入阅读 buildlog 外没有更好的方法。

3. 某些麻烦的软件,尤其是没有采纳 Autotools/CMake/Meson 等标准构建系统的软件,会直接无视外部设置的编译 flag
自行设置一套编译选项。一般拿这种软件是没招的,你除了仔细阅读构建日志以外没有更好的方法。

另外如果谈论的不是 C/C++ 的编译优化选项,而是特定软件的功能开关的话(例如 --enable-xxx 或
-DSOME_MACRO=ON),一般都会在该软件打包目录的 debian/rules 文件中明确写出,未写出的则是采纳上游默认值。

综上,有通用的获取编译 flag 的方法,但因总有特例的存在使得通用方法永远不会 100%
保证可靠,必须深入底层看实际构建效果才能完全保证信息可靠。

-- 
Boyuan Yang







[4] 
https://manpages.debian.org/unstable/dpkg-dev/dpkg-buildflags.1.en.html

Attachment: signature.asc
Description: This is a digitally signed message part


Reply to: