如何完全删除 vcpkg 以及它所做的所有安装/系统更改?
我记得看到一些关于 vcpkg 的常见问题解答,其中说您可以删除 vcpkg 文件夹。但是,一个多小时以来,我一直试图找到相同的常见问题解答,但无济于事。此外,“仅删除文件夹”作为解决方案对我来说似乎难以置信,因为我假设 vcpkg 更改了一些环境变量或其他设置,以及与我尝试使用的 Visual Studio 的集成。关于这个主题的在线搜索只会让人们讨论如何一次删除多个已安装的库,甚至没有明确的解决方案(我也会对此感兴趣)。vcpkg 网站本身似乎没有提供这个问题的答案。
编辑:我在docs.microsoft发现页面上写着“只需删除文件夹” 。
我想vcpkg
在 Windows 的 CMake 项目中使用,因为我需要boost
并且xerces
都由这个包管理器处理。
我有以下几点CMakeLists.txt
:
cmake_minimum_required (VERSION 3.12.0)
project (myproj)
set (CMAKE_PREFIX_PATH ${XERCES_ROOT})
set (Boost_USE_STATIC_LIBS ON)
set (Boost_USE_MULTITHREADED ON)
unset (Boost_INCLUDE_DIR CACHE)
unset (Boost_LIBRARY_DIRS CACHE)
# set (CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/modules)
find_package (Boost COMPONENTS filesystem regex REQUIRED)
find_package (XercesC CONFIG REQUIRED)
set (CMAKE_INCLUDE_CURRENT_DIR ON)
message (STATUS "binary dir is ${CMAKE_BINARY_DIR}")
include_directories (${CMAKE_BINARY_DIR}/${PROJECT_NAME}/)
include_directories (${CMAKE_CURRENT_SOURCE_DIR}/..)
include_directories (${Boost_INCLUDE_DIRS})
include_directories (${XercesC_INCLUDE_DIRS})
set (PROJECT_SRC
code.cpp
)
add_library (${PROJECT_NAME} SHARED ${PROJECT_SRC})
add_dependencies (${PROJECT_NAME} UPDATE_RESOURCES)
target_link_libraries (${PROJECT_NAME} ${Boost_LIBRARIES} XercesC::XercesC) …
Run Code Online (Sandbox Code Playgroud) 我遵循了 VCPKG github 站点中描述的教程 ,然后安装了 OpenMesh 8.0,之后,我链接了工具链
-DCMAKE_TOOLCHAIN_FILE=/home/diolante/vcpkg/scripts/buildsystems/vcpkg.cmake
Run Code Online (Sandbox Code Playgroud)
在 Clion 工具链设置中,当我重新加载CMakeLists.txt
我在 Clion 项目中更改的内容时:
# CMakeLists.txt
cmake_minimum_required(VERSION 3.14)
project(lul)
find_package(openmesh REQUIRED)
add_executable(main main.cpp)
target_link_libraries(main openmesh)
Run Code Online (Sandbox Code Playgroud)
Clion 输出返回以下错误:
CMake Error at /home/diolante/vcpkg/scripts/buildsystems/vcpkg.cmake:288 (_find_package): By not providing "Findopenmesh.cmake" in CMAKE_MODULE_PATH this project has asked CMake to find a package configuration file provided by "openmesh", but CMake did not find one.
Could not find a package configuration file provided by "openmesh" with any
of the following names:
openmeshConfig.cmake
openmesh-config.cmake
Add the …
Run Code Online (Sandbox Code Playgroud) 我正在使用通过 vcpkg 构建的几个库(例如 civet-web 和 prometheus-cpp),用于我的 Visual C++ 项目。当构建 x86 一切都完美时,在 x64 中我收到一堆链接器错误:
错误 LNK2001:未解析的外部符号 __CxxFrameHandler4
在线搜索对这个符号/错误的所有引用都是关于特定项目的,我找不到 __CxxFrameHandler4是什么以及这个错误突出显示了什么问题。我不知道是 vcpkg 构建库的方式有问题,还是我的项目有问题,或者如何开始寻找解决方案。
我确实找到了这篇博客文章,但它参考了 VS2019 的预览,我找不到与之相关的任何设置:https ://devblogs.microsoft.com/cppblog/making-cpp-exception-handling-smaller-x64/
如果有人能解释这一切,那将是一个很大的帮助。
*编辑:我按照这些步骤在64位机器上使用CURL工作(请参阅下面的原始问题):
首先安装vcpkg:
C:\Program Files
C:\Program Files\vcpkg
.\bootstrap-vcpkg.bat
vcpkg integrate install
然后使用vcpkg和Visual Studios 2017命令提示符安装cURL:
VS 2017 Command prompt
并导航到vcpkg文件夹(其中vcpkg.exe
)运行:( vcpkg install curl[*]:x64-windows
注意这可能需要大约半小时才能下载并运行,如果它看起来像是"卡在"部件,请不要担心).
*编辑:以前我的指示说要运行vcpkg install curl:x64-windows
但我[*]
在@ i7clock的要求下添加了启用sftp和scp协议.
完成此步骤后,应检查以确保正确安装卷曲.为此,您应该在VS 2017中创建一个新项目,并尝试包含#include curl/curl.h
而不添加任何其他包含目录.如果你不能这样做,那么你的curl安装出了问题.您应该删除curl(甚至可能是vcpkg文件夹并执行全新安装),直到您可以包含curl/curl.h
.
*编辑:这只有在x64中使用x64调试器/编译时才有效!如果您不能包含curl目录检查以确保您的调试设置为正确的Windows版本.
您可能还需要禁用SSL对等验证:
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, FALSE);
在请求之前放置代码(见下文).请注意,这只是必要的,因为我无法弄清楚如何使用卷曲来使用证书.我有一个关于这个问题的AS-的,但没有答案计算器后这里.以下是您可能需要尝试运行的其他一些步骤,但我最终发现它们没有必要:
CURL_STATICLIB
在属性 - > C/C++ - >预处理器 - …安装软件包后,vcppkg 非常有帮助地显示相关的 CMake 目标...
包 libwebp:x64-windows 提供 CMake 目标:
find_package(WebP CONFIG REQUIRED)
target_link_libraries(main PRIVATE WebP::webp WebP::webpdemux WebP::libwebpmux WebP::webpdecoder)
Run Code Online (Sandbox Code Playgroud)
但是,如果您不复制它们,那么您可能再也见不到它们了。至少我找不到他们。有谁知道如何为已安装的软件包检索此信息?
例如,如何列出可用的 GDAL 库版本?
它们没有通过vcpkg search gdal
命令列在 VCPKG 软件包网站上。
写在这里
在 Visual Studio 中,您可以创建一个新项目(或打开一个现有项目)。所有已安装的库都可以立即#include 并在您的项目中使用,无需额外配置。
现实情况并非如此。如果我这样做New Project
并从头开始创建控制台或 CMake 应用程序并包含一些 CGAL(因为我已安装 CGAL vgpkg
),我(显然)会收到错误消息,指出CGAL
未找到包含内容。
怎么修?是否可以将 vcpkg 的路径放在 Visual Studio 中的某个位置或其他位置?
vcpkg integrate install
也没有帮助。
D:\dev\vcpkg>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=D:/dev/vcpkg/scripts/buildsystems/vcpkg.cmake"
Run Code Online (Sandbox Code Playgroud)
它声称它会起作用,但事实并非如此
显然,这是因为世界上没有魔法。
那么,“无需额外配置”我还忘记了什么?
我试图弄清楚如何配置我的清单文件以使用 vcpkg 的新清单功能编译我的库的静态版本。我当前的清单文件是:
{
"name": "myProject",
"version-string": "v0.1",
],
"dependencies": [
{
"name": "curl",
"features" : [
"openssl"
],
"platform" : "(windows & x64 & static)"
}
]
}
Run Code Online (Sandbox Code Playgroud)
但这会导致没有安装任何内容。该选项"platform" : "windows"
为x86-windows
三元组安装,但我无法找出 的正确参数x64-windows-static
。
我也很好奇——有没有办法为所有库声明一个三元组,而不是让每个库成为一个 JSON 对象并专门列出它?
我已经安装了 vcpkg,一个 C++ 包管理器。现在过了一段时间,我想更新一下。我怎样才能做到这一点?我需要卸载并重新安装吗?