跳轉到內容

NetHack/Building

來自華夏公益教科書,開放的世界,開放的書籍

NetHack 的免費參考

教程

劇透

編輯此模板

NetHack 有幾個不同的構建系統,因為它的原始碼可以被製作成在幾個不同的作業系統上執行。

你可能想自己構建 NetHack,以進行自定義,比如啟用巫師模式。

Clipboard

待辦事項


NetHack 沒有 GNU configure 指令碼。它很難在 Unix 平臺上構建,因為它經常對系統做出不正確的假設。如果你想構建它,這本書假設你熟悉 Unix shell 提示符,包括“make”命令,“cc”命令,以及“cc”的“-I”,“-L”和“-l”選項。

解壓縮 NetHack 後,檢視sys/unix/Install.unx. 該檔案包含說明。這本書只提供了一個使用供應商補丁構建具有 tty、X11 和 Qt 支援的 NetHack 的示例。

供應商補丁

[編輯 | 編輯原始碼]

但是,許多 Unix 和 Linux 發行版都包含 NetHack。獲取你的 Unix 或 Linux 供應商使用的補丁會有所幫助。這樣就跳過了我們修改 Makefile 和標頭檔案以描述我們使用的 Unix 變體的步驟。

例如,在 OpenBSD 上,NetHack 和補丁可以在 ports 樹中找到。

$ cd /usr/ports/games/nethack
$ make configure

上面的命令執行以下步驟,如果需要的話

$ fetch NetHack source code from the Internet
$ extract source code from archive
$ patch source code with build settings for OpenBSD
$ configure (copy patched Makefiles into place)

事實上,由於我們有補丁,我們可能也擁有構建指令碼。從上面繼續,我們可以make build或者make install並獲得一個與作業系統供應商提供的二進位制包非常相似的 NetHack 副本。

但是,可以進行自定義。首先將源目錄移出 ports 樹

$ mv w-nethack-3.4.3/nethack-3.4.3/ /some/path

原始碼,已經配置好並準備構建,出現在/some/path/nethack-3.4.3.

啟用視窗系統

[編輯 | 編輯原始碼]

從 NetHack 的角度來看,視窗系統是允許 NetHack 在螢幕上顯示自己的程式碼。在 Unix 上,這些系統是可用的

  • tty: 使用 ASCII 字元在終端上繪製 NetHack 的傳統程式碼。如果你想在 xterm 或透過 telnet 玩 NetHack,那麼你需要它。
  • X11: 使用 X 視窗系統和 Xaw 小部件的 NetHack 圖形版本。
  • Qt: 另一個 X11 版本,但是使用 Qt 小部件
  • tty: 你需要 curses 和 termcap/terminfo,但你已經有了它們(“vi”或“nano”使用它們)。如果你使用了作業系統供應商的補丁,那麼你的 NetHack 已經配置好了,可以使用系統上找到的 curses 和 termlib 進行構建。
  • X11: 你需要 X 視窗系統和 Xaw。使用 XFree86Xorg 包含你需要的全部內容。
  • Qt: 你需要 Qt 版本 2 或 3。原始碼說版本 2,但版本 3 似乎可以工作。

要啟用這些環境,一些 #defines 必須在include/config.h. 中設定。也可以只對編譯器使用“-D”選項。

Makefile 中的幾項必須調整以支援不同的視窗系統。建立“make”變數的“config”檔案,然後將變數分配複製到Makefile, src/Makefile,和util/Makefile.

OpenBSD 有一種設定,其中這三個檔案自動包含一個 config 檔案

Bourne shell
$ export NETHACKCONFIG=/path/to/config 

C shell
$ setenv NETHACKCONFIG /path/to/config 

這是 OpenBSD 的 X11 和 Qt configs 的合併,旨在在一個二進位制檔案中支援兩者

# installation
PREFIX = /usr/local
NHDIR = /usr/local/lib/nethackdir-3.4.3

# compiler
CC = cc
CXX = c++
LINKCMD = c++ -pthread
MOC = moc3

# graphics for X11 and Qt
VARDATND = x11tiles pet_mark.xbm rip.xpm

# compile and link flags
QTDIR = /usr/local
CFLAGS += -pthread -DX11_GRAPHICS -DQT_GRAPHICS
CFLAGS += -DDEFAULT_WINDOW_SYS=\"tty\" -I/usr/local/include/X11/qt3
CFLAGS += -I/usr/X11R6/include -I/usr/local/include
LFLAGS = -L/usr/local/lib/qt3 -L/usr/X11R6/lib -L/usr/local/lib

# objects
WINSRC = $(WINTTYSRC) $(WINX11SRC) $(WINQTSRC)
WINOBJ = $(WINTTYOBJ) $(WINX11OBJ) qt_win.o qt_clust.o qttableview.o
WINLIB = $(WINTTYLIB) $(WINX11LIB) -lqt-mt -lSM

要在其他系統上使用它,必須進行一些調整。變數“LINKCMD”(而不是“LINK”)和“NHDIR”是 OpenBSD 特定的,由供應商補丁引入。檢查你的供應商補丁,並確定要設定的正確變數是什麼。

要設定已經在某些 Makefile 中設定的變數,例如“MOC”,必須使用“#”註釋掉其他設定。

構建通常像這樣

$ make all
$ make install
華夏公益教科書