如何获取用于在 (.deb) 包中构建二进制文件的编译器标志?

如何获取用于在 (.deb) 包中构建二进制文件的编译器标志?

我知道这apt-get source <package_name>会给你源包。它包含一个debian文件夹,其中包含一个名为 的文件rules。如果我理解正确的话,这个文件描述了如何将源包转换为.deb包,包括应该使用哪些编译器标志。

两个问题:

  1. 如何获取实际使用的编译器标志?是否有必要运行make -n(如果可能的话)或者我可以通过解析文档以某种方式获取它们吗?
  2. 给出来自官方存储库的源包的情况。编译器标志是 100% 由文件决定rules还是取决于创建.deb完成的系统?我是否需要“镜像”官方构建系统才能获得官方.deb构建过程中使用的相同标志?我怎样才能做到这一点?

我学会了这里,debian 没有关于 .deb 打包二进制文件使用编译器标志的官方政策。

答案1

使用的编译器标志是以下函数

  • 文件debian/rules
  • 包的构建文件(因为上游作者也可能在那里指定标志),
  • 使用的构建系统(dhcdbs),
  • 默认编译器设置。

要有效地查看使用的标志,您至少需要编译该包:

debian/rules build

尝试类似的事情

debian/rules -n

一般不会带你走很远;例如在dh基于 - 的包上它只会说

dh build

或类似的东西;要求dh展示这会做什么(与--no-act)会产生

dh_testdir
dh_auto_configure
dh_auto_build

等等。

没有一种万无一失、易于解释的方法可以通过阅读来确定构建标志debian/rules;您可以通过查找那里设置的标志以及(在适当的情况下)查找dpkg-buildflags(例如DEB_BUILD_MAINT_OPTIONS)的选项并运行它来获得一些想法。对于许多包来说,查看使用了哪些标志的最简单方法是查看存档中提供的包的构建日志,从https://buildd.debian.org。例如记录coreutilsi386显示使用的标志-Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -fstack-protector-strong -Wformat -Werror=format-security用于编译和-g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wl,--as-needed -Wl,-z,relro链接(感谢法希姆·米萨指出后者!)。

相关内容