构建
外部包
完整的构建需要从其他地方获取的外部库。大多数(如果不是全部)都是可选的,如果找不到外部库,configure 将构建功能有限的 graphviz。这些库的较新版本应该没问题 - 如果没有,请告诉我们。
您可以在 Graphviz 源代码下载页面 上找到这些外部库的列表。
注意
- GD(PNG、GIF、JPEG 的通用光栅图形驱动程序)
- ZLIB(光栅图像压缩)注意:使用
./configure -s
构建共享库。(参见zlib-1.2.3/Makefile
中的说明)
这些库(静态或动态)及其接口头文件必须已经存在于您的系统中。如果您安装了自己的这些包副本,那也很好,不过您可能需要告诉 make 或 configure 在哪里找到它们。运行 configure --help
以获取详细信息。
在大多数 Linux 发行版中,这些包已经安装,或者可以通过发行版中包含的包安装。您可能需要安装一些 -devel
包才能获取包含头文件。此外,其中一些包需要其他包,因此出于理智,您应该使用一些自动安装机制(如 rpms 或 macports),或查找完整包。
简短构建说明
从下载的源代码包构建 graphviz 的推荐方法是通常的
./configure
make
make install
如果您是从 Git 源代码构建的,那么您必须具有最新版本的 libtool
、libltdl-dev
、automake
、autoconf
和 pkg-config
/pkgconf
。使用以下命令构建
./autogen.sh
make
make install
autogen.sh
接受与它为后续使用生成的 configure
脚本相同的选项。
详细构建说明
首选的图像渲染器是 cairo,它支持 pango 的字体。它处理各种位图格式以及 svg、pdf 和 PostScript。
通用光栅驱动程序是 gd
,它可以配置为生成 GIF(无压缩)、PNG(无损压缩)、JPEG(有损压缩)和无线位图 (WBMP) 文件。所有压缩器都需要 zlib
。在当前构建中,我们使用顶层的 config.h
文件来定义各种符号,例如
HAVE_JPEG
HAVE_PNG
此文件通常由 configure 根据您如何调用它以及它在您的系统上找到的内容生成。
如果您不启用基于 gd
的驱动程序,graphviz 仍然具有用于 PostScript 和 SVG 的 printf
样式驱动程序。(但是,即使这些驱动程序也会从 Freetype(如果可用)提供更好的文本大小估计。)
Unix 构建工具
使用由 GNU autoconf 生成的 configure
。它包含在源代码包中。这在具有 Tcl/Tk、freetype-devel 和 libjpeg 的原始 Linux 发行版上通常效果很好,这些文件由 root 在 /usr
下安装。它在其他版本的 Unix 上运行良好,但可能需要调整 configure
的命令行参数。对于 Linux,您也可以直接获取源代码包或 RPM 在这里。
首先,如果您使用的是来自 Git 的源代码,请运行 ./autogen.sh
以生成 configure
脚本。如果您使用的是来自 graphviz-<version>.tar.gz
的源代码,则不需要此 autogen.sh
步骤。
接下来,运行 configure。有关可能的 configure 选项的帮助,请运行
./configure --help
例如,我使用
./configure --prefix=$HOME/arch/sgi.mips3 \
--with-freetypeincludedir=$HOME/arch/$ARCH/include/freetype2 \
--with-freetypelibdir=$HOME/arch/$ARCH/lib \
--with-tcl=/usr/common/tcl8.3.3
显然,您需要更改路径名以反映您的安装。
请注意,${prefix}/include
目录会自动搜索头文件,而 ${prefix}/lib
会搜索库文件。
如果您遇到一个或多个可选脚本语言绑定的问题,可以使用 --disable-perl
等方法禁用它们。
configure 完成后,它会报告找到哪些可选包以及启用了哪些 Graphviz 功能。如果您期望的某个包或功能未显示为已使用,您可能需要检查 config.log 文件或 configure.ac 或 configure 文件以查看问题所在。通常,任何问题都可以使用环境变量或 configure 的命令行标志解决。
configure 完成后,使用以下命令完成构建
gmake
gmake install
win32 构建工具
有关 Microsoft Windows 的单独 构建说明。
如果您坚持不懈,您可能会在安装在 Microsoft Windows 上的 UWIN 或 Cygwin 上构建 Graphviz。您仍然需要各种第三方包才能启用所有 Graphviz 驱动程序。
Unix 平台特定构建说明
Apple Mac OS/X
目前,Glen Low 提供了 Graphviz 的完整功能端口。此外,Ryan Schmidt 还维护着适用于 macports 的 Graphviz 版本。
我们建议使用 macports 安装所需的第三方库。安装完这些库后,使用 configure 和 make 的标准构建就可以正常工作。唯一的注意事项是,有时会找到不兼容的非 GNU 工具,而不是所需的 GNU 版本。
为 OS X、Snow Leopard 编译 Smyrna(Amanda Stent)
Xcode:
首先,如果您从 Leopard 更新了系统,则必须重新安装开发人员工具。别无选择,我尝试过,您只能这样做。
Macports:
然后您必须卸载并清理 Macports 端口,所有端口。借此机会重新安装 Macports 本身。网上有迁移说明,但比他们说起来要难一些,因为某些链接(如 hs-ports)将不存在,您将不得不手动解决这些障碍。
简而言之,要进行 MacPorts 的干净安装,请执行以下操作:
sudo port -f uninstall installed
sudo port clean --work --archive all
and then new macports
and then sudo port install the things you need now
and possibly sudo port selfupdate and sudo port upgrade outdated at the end
然后,您需要安装 Smyrna、glut、glade 等所有所需工具及其所有依赖项。这需要几天时间。
现在,MacPorts 不会单独安装 glut。它很狡猾,因为如果您说安装 glut,会发生一些事情,但实际上 glut 现在与 mesa 一起提供。这会让您头疼。(glut 的真正核心部分是 mesa 包的一部分 - 编辑)
Graphviz:
然后您获得 graphviz 并使用 `--with-smyrna` 进行配置。我使用了以下方法:
configure --with-smyrna --with-glutincludedir=/opt/local/var/macports/software/mesa/7.6.1_1+hw_render/opt/local/include --with-glutlibdir=/opt/local/var/macports/software/mesa/7.6.1_1+hw_render/opt/local/lib --prefix=/usr/local/share/graphviz
我使用:
configure --with-smyrna --with-glutincludedir=/opt/local/include --with-glutlibdir=/opt/local/lib
在网上,他们说使用 `-framework` 命令行选项来调用 gcc;但是,我无法弄清楚如何在 graphviz 的 makefile 和 configure 文件中使用它。
现在,我到达了一个特定点,它抱怨权限问题,拒绝继续。因此,您可能需要在源目录中使用 chmod 命令。
我到达了构建 gv_perl.cpp 的阶段,它拒绝继续。我最终通过将对 XS 的调用更改为 XSPROTO 来解决这个问题,从而消除了对 `XSUB.h` 的需求(它为您做了什么?什么也没有!)。
然后它说它完成了,但我尝试运行它时,它无法启动,因为它缺少一些模板。dot,因此您需要进行 make clean 并再次进行 make install,因为现在您也感到困惑了。
然后它应该可以工作了!
顺便说一句,通过偷偷地 cd 到 macosx 文件夹并使用标记为您的操作系统的 makefile 进行构建 _不会起作用_。
AIX
Matt Fago 告诉我们,需要使用 `--enable-shared=no` 选项,否则可执行文件在看似正确的编译后会发生段错误。(错误 #421)
Solaris
将 `/usr/ccs/bin` 添加到 `$PATH` 中。
HP-UX
X11 包必须包含 `/usr/contrib/X11R6` 以及基本内容。由于某种原因,GNU autoconf 似乎无法在这个位置找到 X11,因此您可能需要在 `./configure` 行中添加以下内容:
--with-Xawincludedir=/usr/contrib/X11R6/include --with-Xawlibdir=/usr/contrib/X11R6/lib