在windows 環境中,一般比較推薦的打包軟件的方式是,將自己所需要的共享庫放在軟件自己的文件夾中,並且避免與其它的軟件共用。除非是微軟的官方組件,比如微軟自家的VC Runtime。
Boost庫在windows 平台的使用,一般也是推薦直接靜態鏈接,而非是使用動態庫。並且 Boost 庫時如些強大,以致於你使用了之后,不需要手動在 VS 中配置你需要鏈接的庫文件,而是由頭文件搞定這一切,除非你用至的Boost庫用到了微軟自家的庫,但是默認這個庫又沒有配置到項目中。
廢話就說到這里,下面給出具體的操作過程。
第一步,當然是構建我們的Boost庫了
打開VS的命令行(在開始菜單里,我這里是中文版的,名稱是 “適用於 VS 2017 的 x64 本機工具命令提示”),進入到我們的Boost庫主目錄(下載好的Boost庫,解壓后的目錄)。
首先構建Boost自己的構建工具 b2和bjam 等,然后再調用構建工具來完成構建,為了方便,我們直接寫個批處理腳本吧。
1 bootstrap 2 b2 -j %NUMBER_OF_PROCESSORS% toolset=msvc-14.1 address-model=32 threading=multi --build-dir=x86_build --stagedir=stage_x86 3 b2 -j %NUMBER_OF_PROCESSORS% toolset=msvc-14.1 address-model=64 threading=multi --build-dir=x64_build --stagedir=stage_x64
當然,你也可以直接手輸上面的命令行完成構建。構建結束后,我們的 boost 構建目錄下會多出兩個目錄 stage_x86 和 stage_x64 ,這兩個目錄里就是我們需要的庫,當然在windows平台上默認只生成靜態庫,如果你需要動態庫,可以使用 b2的 --build-type 參數來指定。
第二步,將我們的Boost庫文件和頭文件放到指定目錄
我這里以放到 D:\libs\boost_1_65_1 目錄為示例進行操作,目錄結構如下
D:\libs\boost_1_65_1 | | +include | | | +boost(boost頭文件) | | +lib | +msvc-141 | +x86(編譯好的x86庫) | +x64(編譯好的x64庫)
第三步,配置VS的C++屬性頁
這里我們只配置用戶屬性頁,而且只配置桌面應用
打開命令行,創建目錄(也許已存在,創建只是為了保證存在)
md %LOCALAPPDATA%\Microsoft\MSBuild\v4.0 cd %LOCALAPPDATA%\Microsoft\MSBuild\v4.0 start .
然后你會發現彈出了一個文件夾。里面可能會有幾個文件,也許是空的,不過不要緊,我們想要的是這么兩個文件,對應的改一下就好,沒有就自己創建。
Microsoft.Cpp.Win32.user.props 和 Microsoft.Cpp.x64.user.props
兩個文件的內容默認是一樣的,我們修改成如下的樣子
<?xml version="1.0" encoding="utf-8"?> <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ImportGroup Label="PropertySheets"> </ImportGroup> <PropertyGroup Label="UserMacros"> <BOOST_SDK_ROOT>D:\libs\boost_1_65_1</BOOST_SDK_ROOT> </PropertyGroup> <PropertyGroup> <IncludePath>$(BOOST_SDK_ROOT)\include;$(IncludePath)</IncludePath> <LibraryPath>$(BOOST_SDK_ROOT)\lib\msvc-$(PlatformToolsetVersion)\$(PlatformTarget)\;$(LibraryPath)</LibraryPath> </PropertyGroup> <ItemDefinitionGroup /> <ItemGroup> <BuildMacro Include="BOOST_SDK_ROOT"> <Value>$(BOOST_SDK_ROOT)</Value> <EnvironmentVariable>true</EnvironmentVariable> </BuildMacro> </ItemGroup> </Project>
第四步,試一個?
自己寫Hello World!吧,我懶......