IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> Windows的C++开发环境搭建(基于vcpkg+CMake) -> 正文阅读

[C++知识库]Windows的C++开发环境搭建(基于vcpkg+CMake)

一直以来,本人都认为在windows中使用cmake开发C++是一件很难搞的事,windows不像linux那样能方便地对各种C++软件包进行管理,直到发现了vcpkg这个包管理器,才终于使我的windows C++开发体验好了起来。

本文使用vcpkg作为包管理器,cmake作为项目的构建工具,在VS2022/VSCode等IDE或编辑器上搭建C++开发环境。

软件环境

  • Windows 10

  • Git

  • Visual Studio 2022 / Visual Studio Code

  • CMake(optional,VS2022自带cmake)

vcpkg配置

下载安装vcpkg

可以将vcpkg下载到任何位置,一般有两种选择,第一种是将vcpkg作为cmake工程的子模块,将其下载到cmake项目下;第二种是将vcpkg下载到其他位置,添加环境变量,作为全局的包管理器。

本文选择第二种方式

首先选择一个位置下载vcpkg,本文选择直接装在C盘下c:/,在该路径打开Git Bash或者Powershell,使用Git克隆

git clone https://github.com/microsoft/vcpkg
./vcpkg/bootstrap-vcpkg.bat

使用以下命令安装所需要的库:

./vcpkg/vcpkg install <package>

vcpkg在Windows中默认安装的是x86版本的库,如果要x64版本的库,则需要添加后缀x64-windows,以安装x64版本的ceres-solver为例,命令如下:

./vcpkg/vcpkg install ceres:x64-windows

然后vcpkg就会下载ceres的源程序,以及ceres的依赖项(如Eigen3、glog、gflags等),然后编译安装,编译时间比较长,安装成功后会返回以下字段,可以在CMakeLists.txt中加入这些代码来添加ceres依赖

ceres provides CMake targets:
    # this is heuristically generated, and may not be correct
    find_package(Ceres CONFIG REQUIRED)
    target_link_libraries(main PRIVATE ceres Ceres::ceres)

安装完成后,相应的头文件、库文件和<package>-config.cmake文件都会被保存在vcpkg/installed/x64-windows文件夹。

其他常用命令:

  • 列出已安装的package

    vcpkg list
    
  • 可移除指定的package

    vcpkg remove <package>
    

添加环境变量

注意:如果将vcpkg作为项目的子模块使用,则不需要添加环境变量

找到此电脑,右键属性,找到高级系统设置->环境变量,在Path变量中添加值C:\vcpkg即可。然后在任意位置打开一个命令行,输入vcpkg version,如果返回vcpkg版本,则表明环境变量设置成功。这时候就可以在任意位置使用vcpkg命令了。

在VS中使用

运行如下命令:

vcpkg integrate install

执行后会返回:

Applied user-wide integration for this vcpkg root.

All MSBuild C++ projects can now #include any installed libraries.
Linking will be handled automatically.
Installing new libraries will make them instantly available.

CMake projects should use: "-DCMAKE_TOOLCHAIN_FILE=C:/vcpkg/scripts/buildsystems/vcpkg.cmake"

表示在执行完这个命令后,在VS中的非cmake项目可以直接使用#include包含所需要的库的头文件,在链接环节,也会自动的链接到所安装的库。如果是cmake项目的话,还需要添加cmake选项-DCMAKE_TOOLCHAIN_FILE=<vcpkg path>/scripts/buildsystems/vcpkg.cmake,如:

cmake .. -DCMAKE_TOOLCHAIN_FILE=C:/vcpkg/scripts/buildsystems/vcpkg.cmake

如果不在命令行中添加cmake选项,就要CMakeLists.txt中第一个project()前设置cmake工具链

set(CMAKE_TOOLCHAIN_FILE C:/vcpkg/scripts/buildsystems/vcpkg.cmake)

CMake工程示例

新建一个文件夹,创建一个空的CMakeLists.txt文件,用vs2022打开该文件夹,vs会自动识别这是个cmake工程,然后进行配置。在vs中创建main.cpp,继续以ceres库为例,在main.cpp中添加以下程序(来源):

#include <iostream>
#include <ceres/ceres.h>
class CostFunc {
public:
    CostFunc() = default;
    template<typename T>
    bool operator()(const T* x, T* residual) const {
        *residual = 0.5 * pow(T(10.0) - *x, 2);
        return true;
    }
};
int main(int argc, char** argv) {
    ceres::Problem problem;
    double x = 9.0;
    ceres::CostFunction* cost_function
        = new ceres::AutoDiffCostFunction<CostFunc, 1, 1>(new CostFunc);
    problem.AddResidualBlock(cost_function, nullptr, &x             
    );
    ceres::Solver::Options options;
    options.linear_solver_type = ceres::DENSE_QR;
    options.minimizer_progress_to_stdout = true;
    ceres::Solver::Summary summary;
    ceres::Solve(options, &problem, &summary);
    std::cout << summary.BriefReport() << std::endl;
    std::cout << "result: " << x << std::endl;
}

CMakeLists.txt中添加以下代码,再次强调CMAKE_TOOLCHAIN_FILE必须在第一个project()之前设置

cmake_minimum_required(VERSION 3.0.4)
set(CMAKE_TOOLCHAIN_FILE C:/vcpkg/scripts/buildsystems/vcpkg.cmake)
project(cmake_test)
# 寻找依赖项
find_package(Ceres CONFIG REQUIRED)
# 添加头文件路径
include_directories(include ${CERES_INCLUDE_DIRS})
# 生成可执行文件
add_executable(main src/main.cpp)
# 添加链接库
target_link_libraries(main ${CERES_LIBRARIES})

保存后,vs会自动更新cmake项目配置,然后启动程序,VS就会对程序进行编译、运行

在这里插入图片描述

运行后结果如下,表明运行成功

在这里插入图片描述

在VSCode中使用

CMakeLists.txt和main.cpp与前文一致,用VSCode打开文件夹,下方配置栏设置如下:

在这里插入图片描述

如果使用的是另外安装的cmake(不是vs2022自带的cmake),则要确保cmake版本在3.21以上,否则会报以下错误:

CMake Error: Could not create named generator Visual Studio 17 2022

这是因为老版本的cmake还不支持Visual Studio 17 2022这个Generator,点击CMake Latest Release地址下载安装最新版cmake即可。参考

附录

vcpkg瘦身:在使用vcpkg一段时间后,会发现它占用了很大的磁盘空间

image-20220617143645838

可以将vcpkg中的packagebuildtreesdownloads这三个文件夹删除,其中package是不同软件包之间用于暂存的内部文件夹,buildtrees是编译软件包时使用的目录,这也是最占空间的文件夹,downloads保存已下载的软件包源代码或者工具。这三个文件夹都可以删除,删除后占用空间会大大减少。

image-20220617144447716

参考

vcpkg总览

CMake—优雅地构建软件项目实践

vcpkg快速使用教程

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-06-20 22:53:49  更:2022-06-20 22:53:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 15:26:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码