草庐IT

如何在Visual Studio、Clion、Msys2中安装和使用vcpkg

无相孤君 2023-12-15 原文

首先事情是在安装了Msys2之后,想在Clion中使用安装在Msys2中的vcpkg。但是折腾了很久还是无法解决。于是就折腾出了这篇文章,和下一篇如何在Clion使用vcpkg的文章。

不过,由于我电脑上已近配置好了vcpkg以及环境变量,要是重新删除再搞特别麻烦,于是教程我使用msys2来掩饰。你们只需要将msys2当成cmd或终端既可。

第一步,使用git命令克隆下vcpkg的源码。

git clone https://github.com/microsoft/vcpkg

输入命令之后,等待下载成功。

第二步,下载vcpkg.exe。

使用cd命令,进入到vcpkg目录下。

cd vcpkg/

我们可以使用ls命令查看vcpkg目录下有什么文件。

 ls

可以看到bootstrap-vcpkg有两个版本,一个windows脚本,一个shell脚本。

因为我们是windows安装vcpkg,虽然我现在是使用msys2但是也是使用bootstrap-vcpkg.bat。让我们输入下面命令会从github的release下载编译好的vcpkg.exe。

注意:msys2是模拟Linux环境,所以应该注意目录。

Linux:

./bootstrap-vcpkg.bat

Windows:

.\bootstrap-vcpkg.bat

我们使用第二个

运行之后我们,可以看到vcpkg.exe已经下载成功了

第三步,配置vcpkg环境变量(可选)

为什么是可选,因为在你install第三方库的时候,vcpkg会自动下载cmake,所以配不配意义都不大。但是配一下不是更有意思吗?

接下来,我们可以配置环境变量,在开始菜单中搜索




这个目录是你vcpkg的目录,虽然我是使用msys2演示安装,但是配置环境变量是使用我已经安装好的。偷懒,懒得删除重新搞。

配置好环境变量之后,重启你的终端,让环境变量生效。

第四步,配置Cmake(可选)

Cmake官网https://cmake.org/download/

找到合适自己系统架构的版本,我们直接安装便携版 cmake-3.26.0-rc1-windows-x86_64.msi【点击下载】

下载之后,直接打开运行,需要注意的只是这个页面可选添加环境变量和添加桌面图标。

选好,直接Next到结束,我们可以进入系统环境变量,中查看

环境变量已经配置成功。

第五步,使用vcpkg

输入命令

vcpkg integrate install

这句话需要复制出来。

“-DCMAKE_TOOLCHAIN_FILE=D:/vcpkg/scripts/buildsystems/vcpkg.cmake”

接下来,我们安装一个第三方库,xlnt。

vcpkg.exe install xlnt:x64-windows

我们也可以设置 VCPKG_DEFAULT_TRIPLET来指定默认的架构,这样子我们就不需要加:x64-windows了。

Windows:

set VCPKG_DEFAULT_TRIPLET=x64-windows

官方文档:

如果该环境变量未定义,则运行任何 vcpkg 命令时的默认三元组是%VCPKG_DEFAULT_TRIPLET%或特定于平台的选择。

  • Windows:x86-windows
  • Linux:x64-linux
  • MacOs:x64-osx

安装好库,我们使用vcpkg list命令查看

接下来我们打开Visual Studio

SLN(解决方案)项目使用

选择空项目,然后都是一些简单的,直接下一步既可。

创建好项目之后,先回到终端输入命令配置

vcpkg integrate project

与VisualStudio集成。

进入项目文件,之后找到工具——>NuGet包管理器——>管理解决方案的NuGet程序包

因为我已经安装过了,只能大概教你们怎么安装,就是点击右上角绿色加号,添加

D:\vcpkg\scripts\buildsystems

这个目录进去,

添加成功后,将右上角的程序包源改成vcpkg,然后将其添加到你当前的项目。

将下面这段代码粘贴进去

#include <xlnt/xlnt.hpp>

using namespace xlnt;

int main()
{
    workbook wb;
    worksheet ws = wb.active_sheet();
    ws.cell("A1").value(5);
    ws.cell("B2").value("string data");
    ws.cell("C3").formula("=RAND()");
    ws.merge_cells("C3:C4");
    ws.freeze_panes("B2");
    wb.save("example.xlsx");
    return 0;
}

可以看到我们引用头文件,并没有报错,也可以直接编译。

Visual Studio中使用

Cmake项目

新建项目,选择cmake项目,我就多放几张图吧,打字太累了。

在搜索栏中搜索cmake,找到cmake设置。其实也就是从项目目录中,找到打开CMakePresets.json

添加下面这段json到文件中。

    "CMAKE_TOOLCHAIN_FILE": {
            "type": "FILEPATH",
            "value": "D:/vcpkg/scripts/buildsystems/vcpkg.cmake"
        },
        "DVCPKG_TARGET_TRIPLET": "x64-windows"},

选择删除并重新生成缓存

接下来进入到

添加

find_package(Xlnt CONFIG REQUIRED)
target_link_libraries(${PROJECT_NAME} PRIVATE xlnt::xlnt)

然后就是我们的测试了

#include <xlnt/xlnt.hpp>

using namespace xlnt;

int main()
{
    workbook wb;
    worksheet ws = wb.active_sheet();
    ws.cell("A1").value(5);
    ws.cell("B2").value("string data");
    ws.cell("C3").formula("=RAND()");
    ws.merge_cells("C3:C4");
    ws.freeze_panes("B2");
    wb.save("example.xlsx");
    return 0;
}

我们可以看到运行成功,这个时候就有人好奇,怎么看出来运行成功没有,

我们进入到输出目录,就可以看到生成文件了。

Clion中使用

首先下载Clion测试版,当然不使用也是可以的只是更麻烦

https://blog.jetbrains.com/clion/2023/01/support-for-vcpkg-in-clion/

链接里面有测试版Clion使用vcpkg包管理器的使用教程,

而现在我教的是手动配置运行环境。

使用Clion先创建一个项目

接下来,去设置中,找到cmake选项

将之前控制台输出的

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

直接复制粘贴进去

当然,你还可以添加一句,不加默认x86-windows,你就可能报错找不到库的cmake文件。

-DVCPKG_TARGET_TRIPLET=x64-windows

指定使用x64-windows

然后进入CMakeLists.txt文件添加以下两句话。

find_package(Xlnt CONFIG REQUIRED)
target_link_libraries(${PROJECT_NAME} PRIVATE xlnt::xlnt)

推荐使用工具中的,cmake选项,重置缓存并重新加载项目。

毕竟之前的cmake会有一点点缓存。

可以看到,并没有报错,现在是时候拿出我们的测试代码了。

#include <xlnt/xlnt.hpp>

using namespace xlnt;

int main()
{
    workbook wb;
    worksheet ws = wb.active_sheet();
    ws.cell("A1").value(5);
    ws.cell("B2").value("string data");
    ws.cell("C3").formula("=RAND()");
    ws.merge_cells("C3:C4");
    ws.freeze_panes("B2");
    wb.save("example.xlsx");
    return 0;
}

哎呀,遇到问题了。

将工具链,切换成Visual Studio

又遇到问题了,只是我们安装的cmake版本太高了,还配置了环境变量,导致新建项目直接就设置为了3.25版本。clion只支持3.24.x,我们安装的是3.26版本,

CMake Error at CMakeLists.txt:1 (cmake_minimum_required):
  CMake 3.25 or higher is required.  You are running version 3.24.2

修改为cmake_minimum_required(VERSION 3.14)降低编译所需要的最小版本

又是一个小问题,不慌,问题不大。也就是项目运行不了,而已。

"D:\Program Files\JetBrains\CLion 231.6471.1\bin\cmake\win\x64\bin\cmake.exe" -DCMAKE_BUILD_TYPE=Debug "-DCMAKE_MAKE_PROGRAM=D:/Program Files/JetBrains/CLion 231.6471.1/bin/ninja/win/x64/ninja.exe" -DCMAKE_PREFIX_PATH=D:\msys64\mingw64 -DCMAKE_TOOLCHAIN_FILE=D:/vcpkg/scripts/buildsystems/vcpkg.cmake -DVCPKG_TARGET_TRIPLET=x64-windows -G Ninja -S C:\Users\MI\CodeSpace\ClionCodeProjects\vcpkgdemo -B C:\Users\MI\CodeSpace\ClionCodeProjects\vcpkgdemo\cmake-build-debug-visual-studio
-- The C compiler identification is MSVC 19.34.31937.0
-- The CXX compiler identification is MSVC 19.34.31937.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: D:/Program Files/Microsoft Visual Studio/2022/Professional/VC/Tools/MSVC/14.34.31933/bin/Hostx86/x86/cl.exe - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: D:/Program Files/Microsoft Visual Studio/2022/Professional/VC/Tools/MSVC/14.34.31933/bin/Hostx86/x86/cl.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
CMake Error at D:/vcpkg/scripts/buildsystems/vcpkg.cmake:843 (_find_package):
  Could not find a configuration file for package "Xlnt" that is compatible
  with requested version "".

  The following configuration files were considered but not accepted:

    D:/vcpkg/installed/x64-windows/share/xlnt/XlntConfig.cmake, version: 1.5.0 (64bit)

Call Stack (most recent call first):
  CMakeLists.txt:5 (find_package)


-- Configuring incomplete, errors occurred!
See also "C:/Users/MI/CodeSpace/ClionCodeProjects/vcpkgdemo/cmake-build-debug-visual-studio/CMakeFiles/CMakeOutput.log".

[已完成]

实际上这个问题,我也不知道如何解决,但是我知道它怎么发生的。

因为我设置了,-DVCPKG_TARGET_TRIPLET=x64-windows,指定了只能使用x64-windows

我们可以看到又报错,不错很爽

"D:\Program Files\JetBrains\CLion 231.6471.1\bin\cmake\win\x64\bin\cmake.exe" -DCMAKE_BUILD_TYPE=Debug "-DCMAKE_MAKE_PROGRAM=D:/Program Files/JetBrains/CLion 231.6471.1/bin/ninja/win/x64/ninja.exe" -DCMAKE_PREFIX_PATH=D:\msys64\mingw64 -DCMAKE_TOOLCHAIN_FILE=D:/vcpkg/scripts/buildsystems/vcpkg.cmake -G Ninja -S C:\Users\MI\CodeSpace\ClionCodeProjects\vcpkgdemo -B C:\Users\MI\CodeSpace\ClionCodeProjects\vcpkgdemo\cmake-build-debug-visual-studio
-- The C compiler identification is MSVC 19.34.31937.0
-- The CXX compiler identification is MSVC 19.34.31937.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: D:/Program Files/Microsoft Visual Studio/2022/Professional/VC/Tools/MSVC/14.34.31933/bin/Hostx86/x86/cl.exe - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: D:/Program Files/Microsoft Visual Studio/2022/Professional/VC/Tools/MSVC/14.34.31933/bin/Hostx86/x86/cl.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
CMake Error at D:/vcpkg/scripts/buildsystems/vcpkg.cmake:843 (_find_package):
  Could not find a package configuration file provided by "Xlnt" with any of
  the following names:

    XlntConfig.cmake
    xlnt-config.cmake

  Add the installation prefix of "Xlnt" to CMAKE_PREFIX_PATH or set
  "Xlnt_DIR" to a directory containing one of the above files.  If "Xlnt"
  provides a separate development package or SDK, be sure it has been
  installed.
Call Stack (most recent call first):
  CMakeLists.txt:5 (find_package)


-- Configuring incomplete, errors occurred!
See also "C:/Users/MI/CodeSpace/ClionCodeProjects/vcpkgdemo/cmake-build-debug-visual-studio/CMakeFiles/CMakeOutput.log".

[已完成]

不慌,找不到库罢了,但是我们不是安装了x64-windows吗?

为什么找不到,虽然是默认x86-windows,但是我使用DVCPKG_TARGET_TRIPLET指定了版本啊~

Clion测试版中,找到这个省略号,点击vcpkg,既可打开clion测试版的vcpkg包管理器。

搜索xlnt之后

选择x86-windows架构,然后点击安装。

等待下载

让我们清除Cmake的缓存,之后等待cmake的构建。既可,看见出现了可以运行。

点击运行之后,成功生成文件了,接下来我们知己

配置了环境使用命令行的也就是一句话

vcpkg install xlnt:x86-windows

就可以了。

有关如何在Visual Studio、Clion、Msys2中安装和使用vcpkg的更多相关文章

  1. ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法 - 2

    我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div

  2. ruby - 使用 RubyZip 生成 ZIP 文件时设置压缩级别 - 2

    我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看ruby​​zip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d

  3. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  4. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  5. ruby - 在 Ruby 中使用匿名模块 - 2

    假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于

  6. ruby - 如何在 Ruby 中顺序创建 PI - 2

    出于纯粹的兴趣,我很好奇如何按顺序创建PI,而不是在过程结果之后生成数字,而是让数字在过程本身生成时显示。如果是这种情况,那么数字可以自行产生,我可以对以前看到的数字实现垃圾收集,从而创建一个无限系列。结果只是在Pi系列之后每秒生成一个数字。这是我通过互联网筛选的结果:这是流行的计算机友好算法,类机器算法:defarccot(x,unity)xpow=unity/xn=1sign=1sum=0loopdoterm=xpow/nbreakifterm==0sum+=sign*(xpow/n)xpow/=x*xn+=2sign=-signendsumenddefcalc_pi(digits

  7. ruby - 使用 ruby​​ 和 savon 的 SOAP 服务 - 2

    我正在尝试使用ruby​​和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我

  8. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  9. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  10. ruby - 使用 ruby​​ 将 HTML 转换为纯文本并维护结构/格式 - 2

    我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h

随机推荐