跳转到内容

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
华夏公益教科书