Packaging
慣用的 Unix 程序如何檢測它們安裝在什麼前綴下?
如果我安裝了一個帶有非標準前綴的二進製文件,例如
/opt/bin/foo
,它需要一些來自 的靜態文件/opt/share/foo
,它如何找到它們?使用相對於執行檔 (../share/foo
) 的反向引用?在編譯時硬編碼?應用程序處理可變安裝前綴的*慣用方式是什麼?*所有目錄都應該加前綴嗎?(怎麼樣
/var
?)
在編譯時對此類引用進行硬編碼是很常見的,並且可能提供命令行選項或環境變數來覆蓋編譯時預設值。通常程序只記住一個配置文件的位置(通常在 下
/etc
),可以覆蓋任何編譯時預設值。這種方法對於由製作作業系統的同一個人編譯的開源軟體最有意義,作為 Linux 發行版或 BSD 埠的一部分。對於以二進制形式分發的應用程序,通常的方法是從第零個參數定位應用程序二進製文件。按照慣例,
execve
(ieargv[0]
) 的第零個參數是二進製文件的路徑(這取決於呼叫者,通常是外殼程序,以遵守約定)。如果argv[0]
不包含任何/
,應用程序應該對其執行$PATH
查找。