16.1. 使用Visual C++Microsoft Windows SDK构建

PostgreSQL可以使用来自微软的Visual C++编译器套件构建。这些编译器可以来自于Visual StudioVisual Studio Express或者Microsoft Windows SDK的某些版本。如果你还没有准备好一个Visual Studio环境设置,最简单的方式是使用Visual Studio Express 2013 for Windows Desktop中的编译器,或者Windows SDK 7.1中的,两者都可以从微软免费下载。

PostgreSQL已知可以支持使用随Visual Studio 2005Visual Studio 2013(包括精简版)发行的编译器进行编译,单独的Windows SDK 6.0至7.1亦可。64位PostgreSQL的构建只被Microsoft Windows SDK版本6.0a至7.1或Visual Studio 2008及以上版本支持。

使用Visual C++Platform SDK构建的工具在src/tools/msvc目录中。在构建时,请确定在系统路径中没有来自于MinGW或的Cygwin工具。同样,确保所有需要的Visual C++工具都在PATH中。在Visual Studio中,启动Visual Studio Command Prompt。如果你希望构建一个64位版本,你必须使用64位版本的命令,反之亦然。在Microsoft Windows SDK中,启动该SDK在启动菜单中的CMD shell。在最近的SDK版本中你可以使用setenv命令改变目标CPU架构、构建类型以及目标OS,例如setenv /x86 /release /xp会设置为Windows XP或更高版本上的32位发布构建。使用/?来了解setenv的其他选项。所有命令应该从src\tools\msvc目录运行。

在开始构建之前,你还需要编辑文件config.pl来反映任何你想改变的配置选项,或者要使用的任何第三方库目录。完整的配置在第一次读取并解析文件config_default.pl时确定,然后应用config.pl中的任何改变。例如,要制定你的Python安装的位置,将下面的内容放在config.pl中:

$config->{python} = 'c:\python26';

你只需要指定那些和config_default.pl中不同的参数即可。

如果你希望设置任何其他环境变量,可创建一个名为buildenv.pl的文件并将需要的命令放在其中。例如,要把不在PATH中的bison路径加上,创建一个包含以下内容的文件:

$ENV{PATH}=$ENV{PATH} . ';c:\some\where\bison\bin';

16.1.1. 要求

构建PostgreSQL时需要下列附加产品。使用config.pl文件来指定这些库所在的目录。

Microsoft Windows SDK

如果你的构建环境中没有一个受支持的Microsoft Windows SDK版本,推荐你升级到最新版(当前版本为7.1,可从http://www.microsoft.com/downloads/下载)。

你必须总是包括SDK中的Windows头文件和库部分。如果你安装的是一个包括Visual C++ 编译器Windows SDK,构建时不需要Visual Studio。注意在版本8.0a,Windows SDK中不再包括一个完整的命令行构建环境。

ActiveState Perl

ActiveState Perl被用来运行构建生成脚本。MinGW或Cygwin Perl是不符合要求的。AcitveState Perl也必须存在于PATH中。其二进制文件可以从http://www.activestate.com下载(注意:需要版本5.8及以上,免费标准发布就足够了)。

下面的附加产品在开始时并不要求,但是如果要构建完整的包就需要它们。使用config.pl文件来指定这些库所在的目录。

ActiveState TCL

用于构建PL/TCL(注意:要求版本8.4,免费标准发布即可)。

BisonFlex

BisonFlex用来从Git构建,但使用发行文件构建时可以不要求。只有Bison 1.875或2.2及以上才能正常工作。Flex则必须是版本2.5.31或以上。

BisonFlex都包括在msys工具套件中,它作为MinGW编译器套件的一部分可以从http://www.mingw.org/wiki/MSYS得到。msys也可以作为msysGit的一部分从http://git-scm.com/得到。

你将需要把包含flex.exebison.exe的目录加入到buildenv.pl中的PATH环境变量中,除非它们已经存在于PATH中。在MinGW的情况下,目录将是MinGW安装目录的\msys\1.0\bin子目录。对于msysGit,目录将是Git安装目录的bin目录。不要将MinGW编译器工具本身加入到PATH中。

Note: 来自GnuWin32的Bison发布似乎有一个故障,它会导致Bison安装于名称中有空格的目录时发生故障,例如英语安装的默认位置C:\Program Files\GnuWin32。考虑将它安装到C:\GnuWin32或者在PATH环境设置中使用NTFS段路径名(例如C:\PROGRA~1\GnuWin32)。

Note: 在PostgreSQL的FTP站点上的以及被旧文档引用的老式“winflex”二进制程序在64位Windows主机上会出现"flex: fatal internal error, exec failed"的错误。请使用来自msys的flex。

Diff

Diff是回归测试所需要的,可以从http://gnuwin32.sourceforge.net得到。

Gettext

Gettext用于NLS支持,可以从http://gnuwin32.sourceforge.net得到。注意二进制程序、依赖文件以及开发者文件都需要。

MIT Kerberos

用于Kerberos鉴定支持。MIT Kerberos可以从http://web.mit.edu/Kerberos/dist/index.html下载。

libxml2 and libxslt

用于XML支持。二进制文件可以从http://zlatkovic.com/pub/libxml得到,源代码可以从http://xmlsoft.org得到。注意libxml2需要iconv,后者也可以在相同的下载位置得到。

openssl

用于SSL支持。二进制文件可以从http://www.slproweb.com/products/Win32OpenSSL.html下载,源代码可以从http://www.openssl.org下载。

ossp-uuid

用于UUID-OSSP支持(contrib only)。源代码可以从http://www.ossp.org/pkg/lib/uuid/下载。

Python

用于构建PL/Python。二进制文件可以从http://www.python.org下载。

zlib

用于pg_dumppg_restore中的压缩支持。二进制文件可以从http://www.zlib.net下载。

16.1.2. 针对64位Windows的特殊考虑

在64位Windows上,PostgreSQL只能为x64架构构建,因此无法支持安腾处理器。

不支持在同一个构建树中混合32位和64位版本。构建系统会自动检测它运行在32位还是64位环境中,然后相应地构建PostgreSQL。鉴于此,在构建前启动正确的命令提示很重要。

要使用服务器端的第三方库如pythonopenssl,该库必须也是64位。在一个64位服务器上载入一个32位库是不被支持的。PostgreSQL支持的一些第三方库可能只有32位版本,在这种情况下它们就不能被用于64位PostgreSQL。

16.1.3. 构建

要在发行配置中构建PostgreSQL的所有部分(默认),运行命令:

build

要在调试配置中构建PostgreSQL的所有部分,运行命令:

build DEBUG

要构建单独一个对象,例如psql,运行命令:

build psql
build DEBUG psql

要将默认的构建配置改变成调试,将下面的内容放在buildenv.pl文件中:

$ENV{CONFIG}="Debug";

也可以在Visual Studio的图形界面中进行构建。在这种情况下,你需要在命令提示符下运行:

perl mkvcbuild.pl

然后在Visual Studio中打开生成的pgsql.sln(在源代码树的根目录中)。

16.1.4. 清理和安装

在大部分时间里,Visual Studio的自动依赖跟踪会处理发生改变的文件。但是如果发生了大量的改变,你也许需要清理整个安装。为此,只要运行clean.bat命令,它将会自动清除所有生成的文件。你也可以使用dist参数运行它,这种情况下它的效果和make distclean一样,并且会移除flex/bison的输出文件。

默认情况下,所有的文件都被写入到名为debugrelease的子目录中。要将这些文件以标准布局进行安装并且生成初始化和使用数据库所需的文件 ,运行命令:

install c:\destination\directory

16.1.5. 运行回归测试

要运行回归测试,确保你已经完成了所有所需部分的构建。另外,确保载入整个系统所需的DLL(例如Perl和Python过程语言所需的DLL)都在系统路径中。如果它们不在路径中,通过buildenv.pl文件设置。要运行测试,可以从src\tools\msvc目录运行以下命令之一:

vcregress check
vcregress installcheck
vcregress plcheck
vcregress contribcheck

要更改使用的调度方式(默认为并行),在命令行后增加调度方式,如:

vcregress check serial

关于回归测试详见Chapter 30

16.1.6. 构建文档

构建HTML格式的PostgreSQL文档需要一些工具和文件。为所有这些文件创建一个根目录,然后将下面列出的它们分别放在相应子目录中。

OpenJade 1.3.1-2

http://sourceforge.net/projects/openjade/files/openjade/1.3.1/openjade-1_3_1-2-bin.zip/download下载并解压到openjade-1.3.1子目录。

DocBook DTD 4.2

http://www.oasis-open.org/docbook/sgml/4.2/docbook-4.2.zip下载并解压到docbook子目录。

DocBook DSSSL 1.79

http://sourceforge.net/projects/docbook/files/docbook-dsssl/1.79/docbook-dsssl-1.79.zip/download下载并解压到docbook-dsssl-1.79子目录。

ISO字符实体

http://www.oasis-open.org/cover/ISOEnts.zip下载并解压到docbook子目录。

编辑buildenv.pl文件,为根目录的位置增加一个变量,例如:

$ENV{DOCROOT}='c:\docbook';

要构建文档,运行命令builddoc.bat。注意这实际会运行构建两次以生成索引。生成好的HTML文件将在doc\src\sgml中。