我正在尝试编译我最喜欢的nano
带有一些选项的命令行文本编辑器。
实际上,大多数选项以启用所有功能。
首先,我转到下载目录并下载 tarball:
cd Downloads
wget --continue https://www.nano-editor.org/dist/v2.8/nano-2.8.0.tar.xz
然后,我验证其完整性:
wget --continue https://www.nano-editor.org/dist/v2.8/nano-2.8.0.tar.xz.asc
gpg --verify nano-2.8.0.tar.xz.asc
应该说:
gpg: Good signature from "Benno Schulenberg <[email protected]>"
我尝试按如下方式运行配置脚本:
./configure --enable-nanorc --enable-color --enable-extra --enable-multibuffer --enable-utf8 --enable-libmagic --enable-speller --disable-wrapping-as-root
编译后,我得到了这个;直接在编译目录下执行:
Compiled options: --disable-libmagic ...
我强调:
--disable-libmagic
因为我专门配置了它:
--enable-libmagic
没有成功后:
我删除该文件夹以重新开始该过程:
rm -rf nano-2.8.0/
我再次提取存档:
tar -xJf nano-2.8.0.tar.xz
我尝试过不同的选项组合,但没有运气。
系统中是否缺少任何内容,或者我只是做错了什么?
编译后直接执行:
user@computer ~/Downloads/nano-2.8.0/src $ ./nano --version
GNU nano, version 2.8.0 (C) 1999..2016 Free Software Foundation, Inc. (C) 2014..2017 the contributors to nano Email: [email protected] Web: https://nano-editor.org/ Compiled options: --disable-libmagic --disable-wrapping-as-root --enable-utf8
答案1
Nano 不会存储./configure
命令行上提供的编译选项,而是根据检测到的功能重建它们和请求的目标(“微小”Nano 或普通 Nano)。对于tiny Nano,它会报告启用的选项,因为它们会添加到默认值中;对于普通 Nano,它会报告禁用的选项,因为它们从默认值中删除(在大多数情况下)。
就您而言,您正在构建普通的 Nano,因此对于大多数选项它仅报告它们是否被禁用;例外情况是debug
、utf8
和slang
。所有--enable
选项都是普通 Nano 的默认选项,因此它不会在编译选项中报告它们;无论有没有选项,你都会得到相同的结果./configure
。你最终会得到这样的结果,--disable-magic
因为你没有开发文件libmagic
(请参阅托马斯·迪基的回答),因为--enable-utf8
您确实具有 UTF-8 支持的必要功能(并且默认情况下启用)。
答案2
您需要 libmagic 的开发包。在我的 Debian 系统上是libmagic 开发例如。
如果您没有安装开发库,配置脚本会告诉您这一点。这是没有库时显示的内容:
checking whether LINES and COLS can be redefined... yes
checking magic.h usability... no
checking magic.h presence... no
checking for magic.h... no
checking for magic_open in -lmagic... no
安装包后:
checking whether LINES and COLS can be redefined... yes
checking magic.h usability... yes
checking magic.h presence... yes
checking for magic.h... yes
checking for magic_open in -lmagic... yes
您正在检查的功能是 中的定义config.h
,即HAVE_LIBMAGIC
(尽管您还需要头文件,如图所示):
/* Define to 1 if you have the `magic' library (-lmagic). */
#define HAVE_LIBMAGIC 1
/* Define to 1 if you have the `z' library (-lz). */
#define HAVE_LIBZ 1
/* Define to 1 if you have the <limits.h> header file. */
#define HAVE_LIMITS_H 1
/* Define to 1 if you have the <magic.h> header file. */
#define HAVE_MAGIC_H 1