我知道这apt-get source <package_name>
会给你源包。它包含一个debian
文件夹,其中包含一个名为 的文件rules
。如果我理解正确的话,这个文件描述了如何将源包转换为.deb
包,包括应该使用哪些编译器标志。
两个问题:
- 如何获取实际使用的编译器标志?是否有必要运行
make -n
(如果可能的话)或者我可以通过解析文档以某种方式获取它们吗? - 给出来自官方存储库的源包的情况。编译器标志是 100% 由文件决定
rules
还是取决于创建.deb
完成的系统?我是否需要“镜像”官方构建系统才能获得官方.deb
构建过程中使用的相同标志?我怎样才能做到这一点?
我学会了这里,debian 没有关于 .deb 打包二进制文件使用编译器标志的官方政策。
答案1
使用的编译器标志是以下函数
- 文件
debian/rules
, - 包的构建文件(因为上游作者也可能在那里指定标志),
- 使用的构建系统(
dh
等cdbs
), - 默认编译器设置。
要有效地查看使用的标志,您至少需要编译该包:
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。例如记录coreutils
于i386
显示使用的标志-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
链接(感谢法希姆·米萨指出后者!)。