Visual-Studio安装配置
下载 Visual Studio
https://visualstudio.microsoft.com/zh-hans/downloads/
安装 Visual Studio
通常选择:
- 使用 C++ 的桌面开发
目录调整
默认安装在C目录,如果空间不够用,可以调整到其它目录
# 1、先移动目录其它的盘符,示例为E盘
C:\Program Files\Microsoft Visual Studio
C:\Program Files (x86)\Microsoft SDKs
C:\Program Files (x86)\Microsoft Visual Studio
C:\Program Files (x86)\Windows Kits
C:\ProgramData\Microsoft\VisualStudio
C:\ProgramData\Package Cache
# 2、创建软连接
mklink /d "C:\Program Files\Microsoft Visual Studio" "E:\Program Files\Microsoft Visual Studio"
mklink /d "C:\Program Files (x86)\Microsoft SDKs" "E:\Program Files (x86)\Microsoft SDKs"
mklink /d "C:\Program Files (x86)\Microsoft Visual Studio" "E:\Program Files (x86)\Microsoft Visual Studio"
mklink /d "C:\Program Files (x86)\Windows Kits" "E:\Program Files (x86)\Windows Kits"
mklink /d "C:\ProgramData\Microsoft\VisualStudio" "E:\ProgramData\Microsoft\VisualStudio"
mklink /d "C:\ProgramData\Package Cache" "E:\ProgramData\Package Cache"
C++ 包管理工具
使用文档:https://github.com/microsoft/vcpkg/blob/master/README_zh_CN.md
Visual Studio的三方依赖包管理很麻烦,vcpkg解决了这个痛点
vcpkg:自动编译安装C/C++包,并自动解决依赖包编译问题
安装
# 建议放置到根目录:E:\vcpkg
# 建议您使用例如 C:\src\vcpkg 或 C:\dev\vcpkg 的安装目录,否则您可能遇到某些库构建系统的路径问题
git clone https://github.com/microsoft/vcpkg vcpkg-init
# 基础包环境准备
# 模板(主要是网速不给力):git clone https://github.com/microsoft/vcpkg vcpkg-init
# 进入 vcpkg-init 目录,下载 vcpkg.exe (或者对应其它平台的执行文件)
.\bootstrap-vcpkg.bat # 如果下载失败,可以手动下载拷贝到当前目录,这条命令只是用于下载管理命令
# 安装基础包 fmt,会自动安装依赖包:cmake、PowerShell到:~\downloads\tools
# 也可以添加参数:--only-downloads 用于只下载,这里cmake、PowerShell还是会被安装
# github下载慢,可以手动下载到对应目录
.\vcpkg install fmt:x64-windows-static --only-downloads
# 依赖包全部下载完成再安装
.\vcpkg install fmt:x64-windows-static
# 查看安装包
.\vcpkg list
# 复制基础包给其它项目使用
vcpkg-init -> test
# PS:如果打算将此 vcpkg 目录作为全局使用,可以将 vcpkg.exe 添加到系统路径
# 相对目录:~\vcpkg.exe
集成到全局
根据需求是否使用此方案:集成vcpkg.exe到vs全局
# 集成vcpkg.exe到vs全局
.\vcpkg integrate install
# 编译的时候增加参数即可
# CMake projects should use: "-DCMAKE_TOOLCHAIN_FILE=E:/vcpkg/test/scripts/buildsystems/vcpkg.cmake"
# 删除集成
.\vcpkg integrate remove
集成到项目
- vcpkg.exe 模拟一个 NuGet 的本地源 (.\vcpkg integrate project)
- “NuGet 包管理器 ” 添加 vcpkg.exe 模拟的“源” (对应关联路径:~\scripts\buildsystems)
- 不同项目可以选择不同的源 (不同的源可能是依赖包版本不同、项目依赖包列表不同等)
.\vcpkg integrate project
#################### 重要:NuGet 添加本地源 ####################
# 工具 - NuGet 包管理器 - 程序包源 - 新增 - 源(为下面的路径)
# 推荐名称:vcpkg.E.vcpkg.test
# 路径:E:\Users\Administrator\Visual Studio\vcpkg\test\scripts\buildsystems
# 下面是执行 vcpkg integrate project 后 生成的提醒日志
With a project open, go to Tools->NuGet Package Manager->Package Manager Console and paste:
Install-Package vcpkg.E.vcpkg.test -Source "E:\vcpkg\test\scripts\buildsystems"
安装依赖库
根据项目需求安装相关架构的包
# x64 依赖包
# .\vcpkg install fmt:x64-windows-static
# .\vcpkg install openssl:x64-windows-static
# x86 依赖包
# .\vcpkg install fmt:x86-windows-static
# .\vcpkg install openssl:x86-windows-static
# 动态库
# 如果要打包给其它人使用,需要静态包,否则相关dll不会被打入包
# .\vcpkg install fmt:x64-windows
测试三方包
基于:NuGet 包管理器 测试
创建测试项目
- 打开vs-创建新项目-空项目
- 项目名称:HelloWorld
- 勾选:将解决方案和项目放在同一目录
添加源
- 参考:集成到项目
- 右击项目 -> “管理 NuGet 程序包”
- 程序包源 :vcpkg.E.vcpkg.test
- 点击 浏览 -> 选择 “vcpkg.E.vcpkg.test”(多虚拟环境也就实现了) - 安装
- 安装包保存在:~\HelloWorld\packages\vcpkg.E.vcpkg.test.1.0.0
调整解决方案
- 右击项目 - 属性 - 配置属性 - vcpkg - Use Static Libraries - 改成: 是
- 右击项目 - 属性 - 配置属性 - C/C++- 代码生成 - 运行库
- Release 模式选择: 多线程(/MT)
- Debug 模式选择: 多线程调试(/MTd)
自带hello world
外部依赖项:正常加载, 因为 vcpkg 的 Use Static Libraries 默认继承父类
源文件 - 添加 - 新建项 - main.cpp
#include <iostream>
int main()
{
std::cout << "Hello World!\n";
}
三方hello world
测试三方包:.\vcpkg install fmt:x64-windows-static
外部依赖项:无法正常加载??? 因为 vcpkg 的 Use Static Libraries 默认没有使用静态库
#include <fmt/core.h>
int main() {
fmt::print("Hello, world!\n");
}
CMake详解
经典库
boost
Visual Studio 集成 boost 比较简单,参考:https://blog.csdn.net/loongsking/article/details/80136004
以下是基于:linux + vs code 测试
-
# linux环境预处理:指定安装路径:相关路径会写入到:project-config.jam和编译生成b2命令 ./bootstrap.sh --prefix=/usr/local/boost # b2生成include和lib,并安装到:/usr/local/boost ./b2 install
-
测试
-
main.cpp
#include <boost/lambda/lambda.hpp> #include <iostream> #include <iterator> #include <algorithm> int main() { using namespace boost::lambda; typedef std::istream_iterator<int> in; std::for_each( in(std::cin), in(), std::cout << (_1 * 3) << " "); }
-
CMakeLists.txt
cmake_minimum_required(VERSION 3.0.0) project(zaza VERSION 0.1.0) # debug模式 set(Boost_DEBUG ON) include(CTest) enable_testing() # 指定源码也可以使用(适用于本地开发并编译) # 等价于:cmake ../ -DBOOST_ROOT=/mnt/e/boost_1_79_0 SET (BOOST_ROOT "/mnt/e/boost_1_79_0") # 引用线上编译安装的版本 # 等价于:cmake ../ -DBOOST_INCLUDEDIR=/usr/local/boost/include -DBOOST_LIBRARYDIR=/usr/local/boost/lib # 也可以设置单独的根目录:SET (BOOST_ROOT "/usr/local/src/boost") # SET (BOOST_INCLUDEDIR "/usr/local/boost/include") # SET (BOOST_LIBRARYDIR "/usr/local/boost/lib") # 定义版本号 SET (BOOST_MIN_VERSION "1.79.0") # 等价于:cmake ../ -DBoost_NO_BOOST_CMAKE=BOOL:ON # set (Boost_NO_BOOST_CMAKE ON) # cmake的忽略系统BoostConfig.cmake # Boost 版本限制 FIND_PACKAGE(Boost ${BOOST_MIN_VERSION} REQUIRED) if(Boost_FOUND) # 添加include的目录,否则报hpp文件无法找到 include_directories(${Boost_INCLUDE_DIRS}) # MESSAGE( STATUS "Boost_INCLUDE_DIRS = ${Boost_INCLUDE_DIRS}.") # MESSAGE( STATUS "Boost_LIBRARIES = ${Boost_LIBRARIES}.") # MESSAGE( STATUS "Boost_LIB_VERSION = ${Boost_LIB_VERSION}.") # 定义生成的执行文件为:zaza add_executable(zaza main.cpp) # 为生成的目标文件添加头文件 target_link_libraries (zaza ${Boost_LIBRARIES}) endif() set(CPACK_PROJECT_NAME ${PROJECT_NAME}) set(CPACK_PROJECT_VERSION ${PROJECT_VERSION}) include(CPack)
-
编译、运行
# 建议单独添加目录编译 mkdir build && cd build && cmake ../ && make # 测试 echo 1 2 3 | ./zaza
-
常见问题
-
加载vspkg库失败 通过命令 .\vcpkg install fmt:x64-windows-static 安装库后,代码无法正常使用库 原因:因为vcpkg 默认使用动态库,而上面安装的是静态库 解决方案:右击项目 - 属性 - 配置属性 - vcpkg - Use Static Libraries - 改成 是
-
LNK2038 检测到“RuntimeLibrary”的不匹配项 https://blog.csdn.net/xingkongfenqi/article/details/49180075 Release 改成:多线程(/MT) 对应的是MD_StaticRelease Debug 改成: 多线程调试(/MTd)
- 原文作者:zaza
- 原文链接:https://zazayaya.github.io/2022/06/20/windows-visual-studio-install.html
- 说明:转载本站文章请标明出处,部分资源来源于网络,如有侵权请及时与我联系!