首先事情是在安装了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;
}

可以看到我们引用头文件,并没有报错,也可以直接编译。
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测试版,当然不使用也是可以的只是更麻烦
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
就可以了。
我正在学习如何使用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
我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看rubyzip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d
类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
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于
出于纯粹的兴趣,我很好奇如何按顺序创建PI,而不是在过程结果之后生成数字,而是让数字在过程本身生成时显示。如果是这种情况,那么数字可以自行产生,我可以对以前看到的数字实现垃圾收集,从而创建一个无限系列。结果只是在Pi系列之后每秒生成一个数字。这是我通过互联网筛选的结果:这是流行的计算机友好算法,类机器算法:defarccot(x,unity)xpow=unity/xn=1sign=1sum=0loopdoterm=xpow/nbreakifterm==0sum+=sign*(xpow/n)xpow/=x*xn+=2sign=-signendsumenddefcalc_pi(digits
我正在尝试使用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请求没有正确的命名空间。任何人都可以建议我
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t
我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h