Windows 上 postgresql VC 工程的搭建

postgresql 是一款优秀的开源数据库。基于工作需要和个人兴趣,在空余时间稍稍学习下其代码。第一件事就是在 windows 下搭建其 VC 工程啦,这样就可以借助功能强大的 sourceinsight  和 VC 浏览和调试代码啦。

1. 安装辅助软件 perl。因为 postgresql 的源码包中并不自带 vc 工程,但提供生成工程的相关脚本,可借助 perl 生成。在网上找到 perl 下载安装(http://www.perl.org/get.html),安装好后可在命令行下输入命令: perl -version 看是否安装成功,我执行的结果如下(如果提示找不到命令,可能是环境变量没有设置,找到 perl 中的 bin 目录,将其路径加入到环境变量的 path 里面就可以了):


1. 从官网上下载需要的版本的源码(如 9.0.3):http://www.postgresql.org/ftp/source/ 

2. 解压代码压缩包到本地某目录,解压后目录结构如下图:


3. 修改配置文件,准备生成 VC 的工程文件。进入目录 \src\tools\msvc 下,找到 config_default.pl(稍早版本应该是 config.pl),打开该文件,其内容大致如下。由于我们只安装了 perl,而且这已经足够生成 VC 工程了,所以我就把其他的都注释掉了,如果实际需要其它项的话,可以安装相应软件,并且在下面的文件中将其注释去掉。

# Configuration arguments for vcbuild.
use strict;
use warnings;


our $config = {
    asserts=>0, # --enable-cassert
    # integer_datetimes=>1,   # --enable-integer-datetimes - on is now default
    # float4byval=>1,         # --disable-float4-byval, on by default
    # float8byval=>0,         # --disable-float8-byval, off by default
    # blocksize => 8,         # --with-blocksize, 8kB by default
    # wal_blocksize => 8,     # --with-wal-blocksize, 8kb by default
    # wal_segsize => 16,      # --with-wal-segsize, 16MB by default
    #ldap=>1, # --with-ldap
    #nls=>undef, # --enable-nls=<path>
    #tcl=>undef, # --with-tls=<path>
    perl=>'C:\tools\Perl', # --with-perl,我只保留了这一个,因为我只需要这一个,呵呵
    #python=>undef, # --with-python=<path>
    #krb5=>undef, # --with-krb5=<path>
    #openssl=>undef, # --with-ssl=<path>
    #uuid=>undef, # --with-ossp-uuid
    #xml=>undef, # --with-libxml=<path>
    #xslt=>undef, # --with-libxslt=<path>
    #iconv=>undef, # (not in configure, path to iconv)
    #zlib=>undef # --with-zlib=<path>
};


1;

以上各项的具体含义,一会儿给一个链接,有兴趣的朋友可以看看,写得比较详细,我就不赘述了。

4. 好了,让我们现在命令行里试一把。先切换到 \src\tools\msvc 目录,然后用 perl 处理 build.pl,如下图:


会提示Solution.pm 中的一个错误

5. 打开 Solution.pm,转到 69 行,看看到底是啥问题?69行开始的内容如下:

# Determine version of vcbuild command, to set proper verison of visual studio
    open(P,"vcbuild /? |") || die "vcbuild command not found";
    my $line = <P>;
    close(P);
    if ($line !~ /^Microsoft\s*\(R\) Visual C\+\+ [^-]+ - \D+(\d+)\.00\.\d+/)
    {
        die "Unable to determine vcbuild version from first line of output!";
    }
    if ($1 == 8) { $self->{vcver} = '8.00' }
    elsif ($1 == 9) { $self->{vcver} = '9.00' }
    else { die "Unsupported version of Visual Studio: $1" }
    print "Detected Visual Studio version $self->{vcver}\n";

   不难看出,这里是要确定 vc 编译器的版本,可是, vcbuild 命令系统不认识。。。在命令行里试了一把,果然不认识。这里有一个比较简单地解决办法,就是根据自己的编译器类型,我们直接把上面的编译器类型给指定了,呵呵,更好地办法大家可以上网搜罗下。也就是说,改成下面这样(我装的是 VS2010,这里没有给出对应的版本号,所以我就给 9.00 啦,也就是对应 VS2008,等生成好了,用 VS2010 打开升级下就可以了):

    # Determine version of vcbuild command, to set proper verison of visual studio
    #open(P,"vcbuild /? |") || die "vcbuild command not found";
    #my $line = <P>;
    #close(P);
    #if ($line !~ /^Microsoft\s*\(R\) Visual C\+\+ [^-]+ - \D+(\d+)\.00\.\d+/)
    #{
    #    die "Unable to determine vcbuild version from first line of output!";
    #}
    #if ($1 == 8) { $self->{vcver} = '8.00' }
    #elsif ($1 == 9) { $self->{vcver} = '9.00' }
    #else { die "Unsupported version of Visual Studio: $1" }
    #print "Detected Visual Studio version $self->{vcver}\n";
    $self->{vcver}='9.00‘;       #注意这个后面有个分号哦,我刚刚就搞掉了,哇哈哈

6. 好了,在来生成一下:

hoho~~~开始干活啦~~~兴奋ing~~~~

最后一行可能会报一个 msbuild 命令不认识,先不管它。

7. 好了,咱们来看看都变出了些神马东西。切换到代码的最上层目录下,


哇,好多工程文件啊!看来咱们成功了,欢呼~~~

好了,找找,有个 .sln 的解决方案文件的,名字叫做 pgsql.sln,找到之后,猛击啊!

我装的是 VS2010,生成的是 VS2008 的工程,打开的时候会提示装换,果断转。如果您安装的是稍早的版本,在上面的 5 中,可以设置对应的版本号哦!

8. 装换中¥!%@!¥%¥#…………&*……

9. 转换成功!


编译一把试试,变那个黑黑的 postgres 工程就可以啦!编译成功啦,环境也就搭建好啦!

好了,工程搭建就说到这里了,使用的问题后面再说吧!写得不好的或者看不懂的地方,欢迎大家拍砖啊!希望对大家有所帮助。



阅读更多
个人分类: 数据库
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭