文章目录
- cmake - build MS STL project
- 概述
- 笔记
- END
cmake - build MS STL project
概述
MS在github上开源了VS IDE 用的STL实现。
想看看微软的测试用例中怎么用STL.
想先用CMake编译一个MS STL发布版出来。
笔记
CMake需要3.30以上, 拟采用 cmake-3.30.6-windows-x86_64.zip
本机已经装了VS2019社区版。
因为VS2019中就已经有了STL, 用普通命令行编译好些。
先临时替换VS2019中的cmake(3.20)为最新的cmake3.30+
vs2019 - 替换vs2019自带的cmake
启动 VS2019本地命令行(x64 Native Tools Command Prompt for VS 2019)
迁出MS-STL工程到 D:\3rd\MS_STL
进入源码编译目录 cd /d D:\3rd\MS_STL
在每次正式cmake前,将源码编译目录中的临时目录.\out目录删掉。
验证cmake版本为3.30+
D:\3rd\MS_STL\build>cmake --version
cmake version 3.30.6CMake suite maintained and supported by Kitware (kitware.com/cmake).
将MS-STL的版本退到tag的VS2019的最后一个版本
当前VS2019社区版的版本为16.11.42, 可以编译MS-STL的tag vs-2019-16.10
VS2019本地命令行中,就自带git.
D:\3rd\MS_STL>git --version
git version 2.47.0.windows.2
这个库,缺少2个子模块(llvm-project vcpkg)
readme中,是直接从github去更新这2个子模块。
git submodule update --init --progress llvm-project vcpkg
但是现在网络不好,改为将这2个库导入到远端自己账号下的库副本。
2个子模块的库地址如下
https://github.com/llvm/llvm-project.git
https://github.com/microsoft/vcpkg.git
然后将2个子模块的库副本用SSH方式迁出到本地,拷贝到MS-STL工程中使用
将网络整好(能访问到github)
执行下列命令
.\vcpkg\bootstrap-vcpkg.bat
// 等待命令执行完成, 好像就是拷贝了一个.\vcpkg\vcpkg.exe
.\vcpkg\vcpkg.exe install boost-math:x86-windows boost-math:x64-windows
// 等待命令执行完成
// A suitable version of cmake was not found (required v3.30.1)
// 去下载了一个 cmake-3.30.1-windows-i386.zip
// 原来不用替换VS2019的CMake-3.20 ...
好像是文件夹改名报错,没权限?用手工改名是可以的。
关掉VS2019 x64 本地命令行,用管理员权限运行 VS2019 x64 本地命令行继续试验。
.\vcpkg\vcpkg.exe install boost-math:x86-windows boost-math:x64-windows
// 等待命令执行完
// 如果命令执行完后,不确定有没有完整的执行完,可以再次运行此命令。
cmake -G Ninja -S . -B out\build\x64
// 等待命令执行完// 构建x64版本的MS-STL
ninja -C out\build\x64
代码中有警告,导致警告当作错误失败。
按照提示,尝试去修正代码,给变量赋值。
可以编译完成。
如果没看清输出了啥,可以将2个文件夹改名,重新编译,如果能编译成功,就ok了。
d:\3rd\MS_STL>ninja -C out\build\x64
ninja: Entering directory `out\build\x64'
[968/968] Linking CXX static library out\lib\amd64\libcpmtd.lib
查了一下,测试用例在哪里(比较关心具体的知识点,具体咋用)。
发现不用编译也行,因为编译后,并没有将测试用例拷贝出来。
在源码目录的 tests\std 和 test\tr1 里面。
tr1是c++标准库的过渡实现,所以 test\tr1 的测试代码,不用看。
主要看tests\std中的测试用例就行。
测试用例共500+,有些是要C++17或C++20的。
如果有细节知识点不会用,就看官方的测试用例就可以。测试用例中关于STL知识点的用法是最全的。
将MS-STL官方测试工程用SI搞个工程,需要啥就查啥。细节知识点应该是都有。