olNGIb4NkK5r2x7x4oG3GpEzizVpnY6KNCck9cym

那些奇怪的 Makefile 文件檔名後綴是什麼?

有時候 Makefile 為了能夠在不同作業系統平台下面編譯,會根據作業系統的縮寫名稱,替 Makefile 文件加上不同的後綴。

筆者去年認識一位年紀稍長的大哥,對方想要將手邊的 MUD 遊戲重新運行服務,因為沒有程式開發基礎不得其門而入才找上我幫忙。在接手了該份年代久遠的程式專案後,發現其中有許多 Makefile 的檔名後綴看起來既熟悉又陌生。

順手搜尋了一下,發現像是用於快速搜索規模純文字檔案的 glimpse 工具,其專案倉庫中也有這些文件:

hsins@nuc-twn-znr01:/opt/sources/glimpse/4.18.5-1 $ ls Make*
Makefile  Makefile.NeXT  Makefile.alpha  Makefile.hp  Makefile.in  Makefile.linux  
Makefile.org  Makefile.rs6000  Makefile.sgi  Makefile.solaris  Makefile.sunos

hsins@nuc-twn-znr01:/opt/sources/muds/3y $ ls Make*
Makefile.aix  Makefile.hp  Makefile.lin  Makefile.mip  Makefile.nex  Makefile.sol  Makefile.tra

稍微查了一下,才知道原來這些不同後綴的,是為了確保在不同的系統上能夠正確地構建程式碼而有的。比如:

  • Makefile:通用的 Makefile 文件,適用於各種系統。
  • Makefile.aix:適用於 IBM AIX 系統。
  • Makefile.hp:適用於 HP-UX 系統的。
  • Makefile.lin:適用於 Linux 系統。
  • Makefile.mip:適用於 MIPS 架構系統的。
  • Makefile.nex:適用於 Nexenta 系統。
  • Makefile.sol:適用於 Solaris 系統。
  • Makefile.tra:適用於 Tru64 UNIX 系統。

看來還是自己生不逢時,少見多怪了……

順帶一提的是這些文件的檔案名稱後綴,並沒有一致的寫法,比如 Makefile.solarisMakefile.sol 都可以猜測出是適用於 Solaris 作業系統的文件。畢竟對於大多數的作業系統來說,這些檔案名稱後綴都是「約定成俗」的,實際上還是需視文件是由什麼程式運行

張貼留言