NetHack/Building
NetHack 有幾個不同的構建系統,因為它的原始碼可以被製作成在幾個不同的作業系統上執行。
你可能想自己構建 NetHack,以進行自定義,比如啟用巫師模式。
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 小部件
遠離 gnome 埠。你需要 版本 1 的 libgnome 和 libgnomeui 來使用它。如果你像許多人一樣,擁有版本 2,那麼它將無法在沒有一些修復的情況下工作。(Slash'EM 包含對 GTK+ 2 的支援。) |
- tty: 你需要 curses 和 termcap/terminfo,但你已經有了它們(“vi”或“nano”使用它們)。如果你使用了作業系統供應商的補丁,那麼你的 NetHack 已經配置好了,可以使用系統上找到的 curses 和 termlib 進行構建。
- X11: 你需要 X 視窗系統和 Xaw。使用 XFree86 或 Xorg 包含你需要的全部內容。
- 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
使用此 config 時,請注意,強調的變數名稱是 OpenBSD 特定的,並且必須從 Makefile 中註釋掉其他一些行。 |
這是 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
