我最近想要做一些 C++ 的项目,在正式开端之前,我需求先搭建环境,也是大概花了一个晚上,简略了解了一下现在 C++ 项目都是怎样构建的。
目前比较干流的两种包管理器:conan 和 vcpkg,我都试用了一下,个人感觉 vcpkg 的兼容性更好一些,应该能够帮我避不少坑,所以终究挑选了运用 Vcpkg+CMake+VSCode 去构建我的编程环境。
我参阅了 VsCode+Vcpkg+MSVC——C++开发环境装备 这篇文章,可是他有些当地的坑没讲理解,我重新整理和概括一下。
预备
- C++ 编译器
- Windows: Visual C++(目前运用)、MinGW
- macOS: Clang、GCC
- CMake
- Windows: Download | CMake
- macOS: brew install…
- VSCode
- CMake Tools
- C/C++
vcpkg
装置
官方中文文档:vcpkg/README_zh_CN.md at master microsoft/vcpkg GitHub
阅读快速开端
的部分,依照指令一条条做。
Git Clone 不下来?
- 运用科技手法
- 导入项目地址到 Gitee
- Github 镜像下载网站
运转 bootstrap-vcpkg.bat
或者 bootstrap-vcpkg.sh
卡住而且报错?
- 运用科技手法
- 去这个页面下载
vcpkg.exe
: Releases microsoft/vcpkg-tool (github.com),然后拷贝到 Clone 下来的 Git 根目录
macOS 应该是下载
vcpkg-macos
,我没试过
装备环境变量
这一步网上许多人没讲,环境变量能够让后边路径的装备和维护方便许多。
装备一个叫 VCPKG_ROOT
的变量,待会要用,地址便是方才 Clone 的那个 Git 根目录。
装备完之后检查一下:
# powershell
$env:VCPKG_ROOT
# bash
echo $VCPKG_ROOT
装置依靠
装置一个库:
.\vcpkg.exe install fmt:x86-windows
装置依靠一般便是 [库名]:[编译方针]
。
这里补充一个要点,一定要挑选和自己的编译器一样的编译方针,我一开端用了 Visual C++ 的 64 位编译器,结果后边编译的时分一直出问题,由于
x86-windows
是 32 位的。
添加依靠到 CMake
切回到 CMake 项目中。
在 CMakeLists.txt
中参加两条新的指令,find_package
和 target_link_libraries
,编辑完之后大概是这个姿态的:
project(TestVcpkg VERSION 0.1.0)
......
add_executable(TestVcpkg main.cpp)
......
find_package(fmt CONFIG REQUIRED)
target_link_libraries(TestVcpkg PRIVATE fmt::fmt)
target_link_libraries
必须在find_package
和add_executable
后边。
测试程序
引入并运用一下 fmt
库试试。
#include "fmt/format.h"
int main(int, char **)
{
fmt::print("Hello, world!\n");
}
编译
创立一个 CMake 项目,不知道怎样创立,能够参阅后边的 VSCode 部分。
构建项目:
# powershell
cmake -B . -S build -DCMAKE_TOOLCHAIN_FILE=$env:VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake
# bash
cmake -B . -S build -DCMAKE_TOOLCHAIN_FILE=$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake
-
-B
后边跟着的是CMakeLists.txt
的方位 -
-S
后边跟着的是编译到那个方位,一般都是项目目录下新建一个build
目录 - 最终跟着的是装备
CMAKE_TOOLCHAIN_FILE
,需求用到之前装备的环境变量VCPKG_ROOT
。
编译项目:
cmake --build build
运转
找到 build/Debug
下的可履行文件,运转一下就行了。
清单形式
不运用这个也能用,可是强烈推荐运用
简略来说,便是依靠装备文件,会在你运转 CMake 的时分自动帮你装置依靠。
必须要看一下这个:
运用清单形式入门 | Microsoft Learn
清单形式 | Microsoft Learn
VSCode
装备 VSCode 的首要目的是自动化上面的一些指令。
树立 Cmake 项目
VSCode 翻开一个空目录,运用 Ctrl+Shift+P
|⌘+⇧+P
翻开 Command Palette,找到并运转 CMake: Quick Start
。
vcpkg 参加 CMake 自动化编译流程
VSCode 会在你更新 CMakeLists.txt
的时分帮你自动运转 CMake 指令,为了在运转的时分参加 CMAKE_TOOLCHAIN_FILE
的设置,你需求编辑 settings.json
:
{
"cmake.configureSettings": {
"CMAKE_TOOLCHAIN_FILE": "${env:VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake",
"VCPKG_TARGET_TRIPLET": "x86-windows"
},
}
这样装备完之后相当于在 cmake 履行的时分参加了:
-DCMAKE_TOOLCHAIN_FILE=$env:VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake -DVCPKG_TARGET_TRIPLET=x86-windows
这里用到的 ${env:VCPKG_ROOT}
便是上面说到的环境变量,而编译方针,取决于你运用的编译器。
能够在
.vscode
文件夹下新建一个settings.json
,这样能够给每个项目自定义运用x64-windows
仍是x86-windows
到这一步为止,保存刷新一下 CMakeLists.txt
,VSCode 应该没有报错,而且成功帮你编译好了 CMake,如果有问题,去检查一下上面的流程,特别是 vcpkg 官方文档的内容我没怎样提,细心检查一下。
识别和跳转 #include
头文件
默认情况下,代码编辑器会有一个报错,#include
找不到 vcpkg 装置的库,可是履行 Debug 或者 Run 使命,都没有任何问题。
这是由于 VSCode 没有在 vcpkg 的目录中找头文件。
再次运转 Ctrl+Shift+P
|⌘+⇧+P
翻开 Command Palette,找到并运用 C/C++: Edit Configurations(JSON)
,它会创立一个 .vscode
文件夹,里面有一个 c_cpp_properties.json
文件,编辑其中的内容:
{
"configurations": [
{
......
"includePath": [
"${workspaceFolder}/**",
"${env:VCPKG_ROOT}/installed/x64-windows/include",
"${env:VCPKG_ROOT}/installed/x86-windows/include"
],
......
}
],
......
}
许多教程会在这里写上一个 ${vcpkgRoot}/x64-windows/include
,其实这个 ${vcpkgRoot}
便是我们上面装备的 ${env:VCPKG_ROOT}
加上 installed
。