准备
我们需要准备:
- POCO C++ Libraries 的源代码;
- Visual Studio:版本从 2010 到现在最新的 2017,都可以,只要是 CMake 支持的版本就行。
- CMake:版本别太老吧。当前 CMake 最新版本是 3.12。太老的版本我没试过,但是我想只要版本不低于 2.8 应该就没问题。
当前 POCO C++ Libraries 的最新稳定版是 1.9.0,提供了 CMake 文件,可以生成针对 Visual Studio 各个版本的工程文件。要编译 POCO C++ Libraries,首先要根据需要下载源码。如果只需要基本的功能就够了,可以下载 poco-1.9.0.zip。如果需要完整的功能,可以下载 poco-1.9.0-all.zip。注意完整的功能需要 OpenSSL、MySQL 客户端 SDK等依赖包。
编译
以 poco-1.9.0.zip、Visual Studio 2015 为例,编译过程如下:
- 解压 poco-1.9.0.zip
- 编译 x86 平台的动态链接库
- 编译 x64 平台的动态链接库
Win32 (x86) 平台:在源码根目录,执行以下命令:
mkdir cmake_build_x86
cd cmake_build_x86
cmake -G "Visual Studio 14 2015" ..
然后在 cmake_build_x86 文件夹里面,用 Visual Studio 2015 打开 Poco.sln,编译 POCO C++ Libraries 的动态链接库:
x64 平台:在源码根目录,执行以下命令:
mkdir cmake_build_x64
cd cmake_build_x64
cmake -G "Visual Studio 14 2015 Win64" ..
然后在 cmake_build_x64 文件夹里面,用 Visual Studio 2015 打开 Poco.sln,编译 POCO C++ Libraries 的动态链接库
。
编译完成之后,在编译文件夹(cmake_build_x86 / cmake_build_x64)的 bin、lib 子目录中,就是我们最终得到的:(1)动态链接库;(2)以及为了调用动态库,Visual C++ 在 Compile time 需要的静态库。
设置开发环境
设置系统变量
我把源代码解压缩后放在这个目录:
D:\Dev\POCO\v1.9.0_compact_MSVC
然后,设置系统变量 POCO_ROOT 将其指向上述目录:
%POCO_ROOT%\include
将所有的 include 文件夹集中在 %POCO_ROOT%\include 目录中:
在 %POCO_ROOT% 目录中,你会注意到,Encodings、Foundation、JSON 等等这些文件夹下面,分别有它们各自的 include 目录。
这样就会导致在 Visual Studio 中设置引用目录的时候非常不方便,所以我们创建 %POCO_ROOT%\include 目录,然后将Encodings、Foundation、JSON 等等这些文件夹下面的 include 目录里面的文件都集中在 %POCO_ROOT%\include 目录中。需要收集的目录包括:
Encodings Foundation JSON Net Util XML
最终 %POCO_ROOT%\include 目录看起来应该是这样子:
%POCO_ROOT%\build
然后再将编译得到的 bin、lib 文件夹都收集到以下目录:
%POCO_ROOT%\build\Win32
%POCO_ROOT%\build\x64
在 Visual C++ 工程文件中的设置
在 Visual C++ 工程文件中,要想引用 POCO C++ Libraries 的动态链接库,要这样设置:
1. Include
在 C/C++ | General | Additional Include Directories 设置里面增加:
$(POCO_ROOT)\include
2. Libs
在 Linker | General | Additional Library Directories 设置里面增加:
$(POCO_ROOT)\build\$(Platform)\$(Configuration)\
在 Linker | Input | Additional Dependencies 设置里面,针对 Debug configuration,增加:
PocoEncodingsd.lib
PocoFoundationd.lib
PocoJSONd.lib
PocoNetd.lib
PocoUtild.lib
PocoXMLd.lib
针对 Release configuration,增加:
PocoEncodings.lib
PocoFoundation.lib
PocoJSON.lib
PocoNet.lib
PocoUtil.lib
PocoXML.lib
3. DLLs
在 Post-Build Event 设置里面增加拷贝 DLL 文件到目标文件夹的命令。
copy "$(POCO_ROOT)\build\$(Platform)\bin\$(Configuration)\*.*" $(TargetDir)