cmake - build MS STL project

devtools/2025/1/13 10:24:42/

文章目录

    • 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搞个工程,需要啥就查啥。细节知识点应该是都有。

END


http://www.ppmy.cn/devtools/150126.html

相关文章

基于spingboot+html技术的博客网站

博主介绍:硕士研究生,专注于信息化技术领域开发与管理,会使用java、标准c/c等开发语言,以及毕业项目实战✌ 从事基于java BS架构、CS架构、c/c 编程工作近16年,拥有近12年的管理工作经验,拥有较丰富的技术架…

冒泡排序基础与实现

目录 1. 原理图 ​编辑 2. 什么是冒泡排序 3. 工作原理 3.1 具体步骤 3.2 时间复杂度 3.3 空间复杂度 4. 代码实现 5. 总结 1. 原理图 2. 什么是冒泡排序 冒泡排序(Bubble Sort)是一种简单的排序算法,它通过重复地遍历要排序的列表&am…

vue elementui 大文件进度条下载

下载进度条 <el-card class"box-card" v-if"downloadProgress > 0"><div>正在下载文件...</div><el-progress :text-inside"true" :stroke-width"26" :percentage"downloadProgress" status"…

51单片机——定时器中断(重点)

STC89C5X含有3个定时器&#xff1a;定时器0、定时器1、定时器2 注意&#xff1a;51系列单片机一定有基本的2个定时器&#xff08;定时器0和定时器1&#xff09;&#xff0c;但不全有3个中断&#xff0c;需要查看芯片手册&#xff0c;通常我们使用的是基本的2个定时器&#xff…

ubuntu设置开机无需输入密码自启动todesk,内网穿透natapp

设置todesk自启动 1、完善rc-local.service服务 sudo vim /lib/systemd/system/rc-local.service 写入以下内容 # SPDX-License-Identifier: LGPL-2.1-or-later # # This file is part of systemd. # # systemd is free software; you can redistribute it and/or modif…

2025华数杯国际赛A题完整论文讲解(含每一问python代码+数据+可视化图)

大家好呀&#xff0c;从发布赛题一直到现在&#xff0c;总算完成了2025“华数杯”国际大学生数学建模竞赛A题Can He Swim Faster的完整的成品论文。 本论文可以保证原创&#xff0c;保证高质量。绝不是随便引用一大堆模型和代码复制粘贴进来完全没有应用糊弄人的垃圾半成品论文…

VSCode 更好用的设置

配置 {"terminal.integrated.fontSize": 15,"security.workspace.trust.untrustedFiles": "open","editor.minimap.enabled": false,"workbench.colorTheme": "Visual Studio 2017 Light - C","gnuGlobal.c…

STM32如何测量运行的时钟频率

前言 环境&#xff1a; 芯片&#xff1a;STM32F103C8T6 Keil&#xff1a;V5.24.2.0 一、简介STM32F103C8T6的时钟源 ①HSI 内部高速时钟,RC振荡器&#xff0c;频率为8MHz&#xff0c;精度不高。②HSE 外部高速时钟,可接石英/陶瓷谐振器&#xff0c;频率范围为4MHz~16MHz&…