Debian
如何獲取用於在 (.deb) 包中建構二進製文件的編譯器標誌?
我知道這
apt-get source <package_name>
會給你源包。它包含一個debian
文件夾,其中包含一個名為rules
. 如果我理解正確,這個文件描述瞭如何將源包轉換為.deb
包,包括應該使用哪些編譯器標誌。兩個問題:
- 如何獲取實際使用的編譯器標誌?是否有必要執行
make -n
(如果可能的話)或者我可以通過解析文件以某種方式獲取它們?- 鑑於來自官方儲存庫的源包的情況。編譯器標誌是 100% 由
rules
文件確定還是取決於.deb
創建完成的系統?我是否需要“鏡像”官方建構系統以獲取在官方.deb
建構過程中使用的相同標誌?我怎樣才能做到這一點?我在這裡了解到,debian 沒有官方政策,哪些編譯器標誌用於 .deb 打包的二進製文件。
使用的編譯器標誌是
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開始。例如, on的日誌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
連結(感謝Faheem Mitha指出後者!)。