在windows上编译PG,编译器可以使用vs和MinGW的gcc进行编译。
编译前准备:
Microsoft Windows SDK
Strawberry Perl //提供Perl的支持,内部还包括gcc
Bison和Flex(不同的PG需要不通的版本,具体需要查看帮助文档)
安装Bison和Flex目录不要选择默认的c:\program files,因为目录中间有空格,后续编译会报错,PG的文档中有记录,建议安装在没有空格的目录中,比如c:\GnuWin32目录中
可以使用win_bison.exe和win_flex.exe
工程构造工具以及编译步骤
PG16之前,包括16,使用Perl进行项目构造后进行编译,具体配置信息在src/tools/msvc目录中。
具体步骤:
-
安装vs的community版本。
-
开始菜单,选择VS -> X64 native command tools
-
cd进入src/tools/msvc
-
执行build configuration component
build release psql (编译plsq的release版本) 默认编译文件放在release目录中
build debug (编译所有的debug版本) ,默认编译文件放在Debug目录中
同时会在msvc目录中创建一个pgsql.sln工程文件,可以直接使用vs打开后进行编译。
- 如果需要添加组件,比如支持openSSL,libxml等等,可以打开
msvc目录中的config_deafult.pl文件,添加相应的组件,如下面的内容,我添加了对Openssl和iconv的支持
perl
# Copyright (c) 2021-2023, PostgreSQL Global Development Group
# Configuration arguments for vcbuild.
use strict;
use warnings;
our $config = {
asserts => 0, # --enable-cassert
# blocksize => 8, # --with-blocksize, 8kB by default
# wal_blocksize => 8, # --with-wal-blocksize, 8kB by default
ldap => 1, # --with-ldap
extraver => undef, # --with-extra-version=<string>
gss => undef, # --with-gssapi=<path>
icu => undef, # --with-icu=<path>
lz4 => undef, # --with-lz4=<path>
zstd => undef, # --with-zstd=<path>
nls => undef, # --enable-nls=<path>
tap_tests => undef, # --enable-tap-tests
tcl => undef, # --with-tcl=<path>
perl => undef, # --with-perl=<path>
python => undef, # --with-python=<path>
openssl => 'C:\Program Files\OpenSSL-Win64', # --with-ssl=openssl with <path>
uuid => undef, # --with-uuid=<path>
xml => undef, # --with-libxml=<path>
xslt => undef, # --with-libxslt=<path>
iconv => 'C:\Program Files\GnuWin32', # (not in configure, path to iconv)
zlib => undef # --with-zlib=<path>
};
- 编译完后,使用install target_dir install_type进行安装
PG16除了可以使用Perl进行项目的构建,还增加了meson进行项目的构建
PG17以及之后,就只能使用meson进行项目的构建(src/tools/msvc目录已经没有了)
meson构建项目步骤
-
安装meson,具体安装查看帮助
-
进入到PG源码的根目录下,执行
meson setup build --prefix=targetdir --buildtype=debug|release -Dssl=openssl
(类似./configure --prefix=targetdir --with-openssl --enable-debug)
-
cd build
-
ninja 进行编译(默认使用gcc进行编译,因为Strawberry Perl 带着 gcc和g++编译器)
4.ninja install 安装
-
也可以使用vs进行编译,方法如下
-
mesa setup build_debug --backend=vs2022 --prefix=targetdir --buildtype=debug -Dssl=openssl //编译debug版本
-
cd build
perl
(arcgispro-py3) D:\info\postgresql\postgresql-17.5\build>meson compile
INFO: autodetecting backend as vs2022
INFO: calculating backend command to run: msbuild D:\info\postgresql\postgresql-17.5\build\postgresql.sln -maxCpuCount -verbosity:minimal
适用于 .NET Framework MSBuild 版本 17.13.19+0d9f5a35a
-
meson compile
-
meson build