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