【Windows】Windows平台基于加速地址安装vcpkg并集成到Visual Studio 2017

基础运行环境

启动: 适用于 VS 2017 的 x64 本机工具命令提示

ninja

下载压缩包

https://gh-proxy.com/https:/github.com/ninja-build/ninja/releases/download/v1.13.1/ninja-win.zip

直接解压到c:/Windows (无需配置环境变量)

CMake

下载安装包

https://gh-proxy.com/https://github.com/Kitware/CMake/releases/download/v4.0.3/cmake-4.0.3-windows-x86_64.msi

手动安装

下载vcpkg

c:
cd /
git clone --depth=1 https://gh-proxy.com/github.com/microsoft/vcpkg

使用vscode

替换

https://github.com

https://gh-proxy.com/github.com

修改 C:\vcpkg\scripts\bootstrap.ps1
替换

if ($env:PROCESSOR_ARCHITECTURE -eq 'ARM64' -or $env:PROCESSOR_IDENTIFIER -match "ARMv[8,9] \(64-bit\)") {& "$scriptsDir/tls12-download-arm64.exe" github.com "/microsoft/vcpkg-tool/releases/download/$versionDate/vcpkg-arm64.exe" "$vcpkgRootDir\vcpkg.exe"
} else {& "$scriptsDir/tls12-download.exe" github.com "/microsoft/vcpkg-tool/releases/download/$versionDate/vcpkg.exe" "$vcpkgRootDir\vcpkg.exe"
}Write-Host ""if ($LASTEXITCODE -ne 0)
{Write-Error "Downloading vcpkg.exe failed. Please check your internet connection, or consider downloading a recent vcpkg.exe from https://gh-proxy.com/github.com/microsoft/vcpkg-tool with a browser."throw
}

if ($env:PROCESSOR_ARCHITECTURE -eq 'ARM64' -or $env:PROCESSOR_IDENTIFIER -match "ARMv[8,9] \(64-bit\)") {wget https://gh-proxy.com/github.com/microsoft/vcpkg-tool/releases/download/$versionDate/vcpkg-arm64.exe $vcpkgRootDir\vcpkg.exe
} else {wget https://gh-proxy.com/github.com/microsoft/vcpkg-tool/releases/download/$versionDate/vcpkg.exe -o $vcpkgRootDir\vcpkg.exe
}Write-Host ""if (-not $?) 
{Write-Error "Downloading vcpkg.exe failed. Please check your internet connection, or consider downloading a recent vcpkg.exe from https://gh-proxy.com/github.com/microsoft/vcpkg-tool with a browser."throw
}

第三方库下载地址替换

修改C:\vcpkg\scripts\cmake\vcpkg_download_distfile.cmake:117行

    vcpkg_list(SET params "x-download" "${arg_FILENAME}")foreach(url IN LISTS arg_URLS)vcpkg_list(APPEND params "--url=${url}")endforeach()

改为

    foreach(url IN LISTS arg_URLS)# 将第三方库的地址更换为国内镜像源地址,这五个只是我目前找到的,如果有更多的需要替换的地址,形如:# string(REPLACE <oldUrl> <newUrl> url "${url}"),按照这个格式继续添加即可string(REPLACE "http://download.savannah.nongnu.org/releases/gta/" "https://marlam.de/gta/releases/" url "${url}")string(REPLACE "https://github.com/" "https://gh-proxy.com/github.com/" url "${url}")string(REPLACE "https://ftp.gnu.org/" "https://mirrors.aliyun.com/" url "${url}")string(REPLACE "https://raw.githubusercontent.com/" "https://ghfast.top/https://raw.githubusercontent.com/" url "${url}")string(REPLACE "http://ftp.gnu.org/pub/gnu/" "https://mirrors.aliyun.com/gnu/" url "${url}")string(REPLACE "https://ftp.postgresql.org/pub/" "https://mirrors.tuna.tsinghua.edu.cn/postgresql/" url "${url}")string(REPLACE "https://support.hdfgroup.org/ftp/lib-external/szip/2.1.1/src/" "https://distfiles.macports.org/szip/" url "${url}")vcpkg_list(APPEND params "--url=${url}")endforeach()

执行bootstrap-vcpkg.bat

注意在“适用于 VS 2017 的 x64 本机工具命令提示”中执行

C:\vcpkg>bootstrap-vcpkg.batvcpkg package management program version 2025-07-21-d4b65a2b83ae6c3526acd1c6f3b51aff2a884533See LICENSE.txt for license information.
Telemetry
---------
vcpkg collects usage data in order to help us improve your experience.
The data collected by Microsoft is anonymous.
You can opt-out of telemetry by re-running the bootstrap-vcpkg script with -disableMetrics,
passing --disable-metrics to vcpkg on the command line,
or by setting the VCPKG_DISABLE_METRICS environment variable.Read more about vcpkg telemetry at docs/about/privacy.md

使用vcpkg

全局安装程序库(openssl)

C:\vcpkg>vcpkg install openssl
Computing installation plan...
The following packages will be built and installed:openssl:x64-windows@3.5.2* vcpkg-cmake-get-vars:x64-windows@2025-05-29
Additional packages (*) will be modified to complete this operation.
Detecting compiler hash for triplet x64-windows...
Compiler found: C:/Program Files (x86)/Microsoft Visual Studio/2017/Enterprise/VC/Tools/MSVC/14.16.27023/bin/Hostx64/x64/cl.exe
Restored 0 package(s) from C:\Users\yeqiang\AppData\Local\vcpkg\archives in 146 us. Use --debug to see more details.
Installing 1/2 vcpkg-cmake-get-vars:x64-windows@2025-05-29...
Building vcpkg-cmake-get-vars:x64-windows@2025-05-29...
-- Installing: C:/vcpkg/packages/vcpkg-cmake-get-vars_x64-windows/share/vcpkg-cmake-get-vars/vcpkg_cmake_get_vars.cmake
-- Installing: C:/vcpkg/packages/vcpkg-cmake-get-vars_x64-windows/share/vcpkg-cmake-get-vars/cmake_get_vars
-- Installing: C:/vcpkg/packages/vcpkg-cmake-get-vars_x64-windows/share/vcpkg-cmake-get-vars/cmake_get_vars/CMakeLists.txt
-- Installing: C:/vcpkg/packages/vcpkg-cmake-get-vars_x64-windows/share/vcpkg-cmake-get-vars/cmake-get-vars.cmake.in
-- Installing: C:/vcpkg/packages/vcpkg-cmake-get-vars_x64-windows/share/vcpkg-cmake-get-vars/vcpkg-port-config.cmake
-- Installing: C:/vcpkg/packages/vcpkg-cmake-get-vars_x64-windows/share/vcpkg-cmake-get-vars/copyright
-- Performing post-build validation
Starting submission of vcpkg-cmake-get-vars:x64-windows@2025-05-29 to 1 binary cache(s) in the background
Elapsed time to handle vcpkg-cmake-get-vars:x64-windows: 51.9 ms
vcpkg-cmake-get-vars:x64-windows package ABI: 6ed36a3d2a83ae143b6f8887aed846b6944a5cdeff44fcf9d4f30eb4a7c86389
Installing 2/2 openssl:x64-windows@3.5.2...
Building openssl:x64-windows@3.5.2...
Downloading https://gh-proxy.com/github.com/openssl/openssl/archive/openssl-3.5.2.tar.gz -> openssl-openssl-openssl-3.5.2.tar.gz
Successfully downloaded openssl-openssl-openssl-3.5.2.tar.gz
-- Extracting source C:/vcpkg/downloads/openssl-openssl-openssl-3.5.2.tar.gz
-- Applying patch cmake-config.patch
-- Applying patch command-line-length.patch
-- Applying patch script-prefix.patch
-- Applying patch windows/install-layout.patch
-- Applying patch windows/install-pdbs.patch
-- Applying patch unix/android-cc.patch
-- Applying patch unix/move-openssldir.patch
-- Applying patch unix/no-empty-dirs.patch
-- Applying patch unix/no-static-libs-for-shared.patch
-- Using source at C:/vcpkg/buildtrees/openssl/src/nssl-3.5.2-e03035cfd7.clean
-- Found external ninja('1.13.1').
-- Getting CMake variables for x64-windows
-- Loading CMake variables from C:/vcpkg/buildtrees/openssl/cmake-get-vars_C_CXX-x64-windows.cmake.log
Downloading https://gh-proxy.com/github.com/StrawberryPerl/Perl-Dist-Strawberry/releases/download/SP_54201_64bit/strawberry-perl-5.42.0.1-64bit-portable.zip -> strawberry-perl-5.42.0.1-64bit-portable.zip
Successfully downloaded strawberry-perl-5.42.0.1-64bit-portable.zip
Downloading nasm-2.16.03-win64.zip, trying https://www.nasm.us/pub/nasm/releasebuilds/2.16.03/win64/nasm-2.16.03-win64.zip
Successfully downloaded nasm-2.16.03-win64.zip
-- Getting CMake variables for x64-windows
Downloading jom_1_1_4.zip, trying https://download.qt.io/official_releases/jom/jom_1_1_4.zip
Successfully downloaded jom_1_1_4.zip
-- Prerunning x64-windows-dbg
-- Building x64-windows-dbg
-- Prerunning x64-windows-rel
-- Building x64-windows-rel
-- Fixing pkgconfig file: C:/vcpkg/packages/openssl_x64-windows/lib/pkgconfig/libcrypto.pc
-- Fixing pkgconfig file: C:/vcpkg/packages/openssl_x64-windows/lib/pkgconfig/libssl.pc
-- Fixing pkgconfig file: C:/vcpkg/packages/openssl_x64-windows/lib/pkgconfig/openssl.pc
Downloading msys2-mingw-w64-x86_64-pkgconf-1~2.4.3-1-any.pkg.tar.zst, trying https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-pkgconf-1~2.4.3-1-any.pkg.tar.zst
Successfully downloaded msys2-mingw-w64-x86_64-pkgconf-1~2.4.3-1-any.pkg.tar.zst
Downloading msys2-msys2-runtime-3.6.2-2-x86_64.pkg.tar.zst, trying https://mirror.msys2.org/msys/x86_64/msys2-runtime-3.6.2-2-x86_64.pkg.tar.zst
warning: Download https://mirror.msys2.org/msys/x86_64/msys2-runtime-3.6.2-2-x86_64.pkg.tar.zst failed -- retrying after 1000ms
Successfully downloaded msys2-msys2-runtime-3.6.2-2-x86_64.pkg.tar.zst
-- Using msys root at C:/vcpkg/downloads/tools/msys2/9272adbcaf19caef
-- Fixing pkgconfig file: C:/vcpkg/packages/openssl_x64-windows/debug/lib/pkgconfig/libcrypto.pc
-- Fixing pkgconfig file: C:/vcpkg/packages/openssl_x64-windows/debug/lib/pkgconfig/libssl.pc
-- Fixing pkgconfig file: C:/vcpkg/packages/openssl_x64-windows/debug/lib/pkgconfig/openssl.pc
-- Installing: C:/vcpkg/packages/openssl_x64-windows/share/openssl/usage
-- Installing: C:/vcpkg/packages/openssl_x64-windows/share/openssl/copyright
-- Performing post-build validation
Starting submission of openssl:x64-windows@3.5.2 to 1 binary cache(s) in the background
Elapsed time to handle openssl:x64-windows: 14 min
openssl:x64-windows package ABI: 1dd5b794138c062139cdba6b87e8c4344382e24dd173b65f5e46cea0d6a4f100
Total install time: 14 min
Installed contents are licensed to you by owners. Microsoft is not responsible for, nor does it grant any licenses to, third-party packages.
Packages installed in this vcpkg installation declare the following licenses:
Apache-2.0
MIT
openssl is compatible with built-in CMake targets:find_package(OpenSSL REQUIRED)target_link_libraries(main PRIVATE OpenSSL::SSL)target_link_libraries(main PRIVATE OpenSSL::Crypto)Completed submission of vcpkg-cmake-get-vars:x64-windows@2025-05-29 to 1 binary cache(s) in 23.8 ms
Waiting for 1 remaining binary cache submissions...
Completed submission of openssl:x64-windows@3.5.2 to 1 binary cache(s) in 1.8 s (1/1)
All requested installations completed successfully in: 14 min

相当耗时!对比linux平台yum、apt等直接安装方式要慢一大截,比go这种编译型的也慢一大截,体验不好!

安装产生的主要内容

下载缓存
C:\vcpkg>dir downloads驱动器 C 中的卷没有标签。卷的序列号是 BE84-90DBC:\vcpkg\downloads 的目录2025/08/20  14:44    <DIR>          .
2025/08/20  14:09    <DIR>          ..
2025/08/20  14:09         1,312,005 7z2409.7z
2025/08/20  14:09         1,348,869 7z2409.7z.exe
2025/08/20  14:09         2,267,282 abseil-abseil-cpp-20250127.1.tar.gz
2025/08/20  14:39         1,696,930 jom_1_1_4.zip
2025/08/20  14:42            90,772 msys2-mingw-w64-x86_64-pkgconf-1~2.4.3-1-any.pkg.tar.zst
2025/08/20  14:44         1,932,245 msys2-msys2-runtime-3.6.2-2-x86_64.pkg.tar.zst
2025/08/20  14:38           513,543 nasm-2.16.03-win64.zip
2025/08/20  14:31        53,361,814 openssl-openssl-openssl-3.5.2.tar.gz
2025/08/20  14:09       107,886,044 PowerShell-7.2.24-win-x64.zip
2025/08/20  14:37       302,439,100 strawberry-perl-5.42.0.1-64bit-portable.zip
2025/08/20  14:44    <DIR>          tools
构建目录(源代码释放目录)
C:\vcpkg>dir buildtrees驱动器 C 中的卷没有标签。卷的序列号是 BE84-90DBC:\vcpkg\buildtrees 的目录2025/08/20  14:31    <DIR>          .
2025/08/20  14:09    <DIR>          ..
2025/08/20  14:09    <DIR>          abseil
2025/08/20  14:09    <DIR>          c-ares
2025/08/20  14:31    <DIR>          detect_compiler
2025/08/20  14:09    <DIR>          grpc
2025/08/20  14:41    <DIR>          openssl
2025/08/20  14:09    <DIR>          protobuf
2025/08/20  14:09    <DIR>          re2
2025/08/20  14:09    <DIR>          utf8-range
2025/08/20  14:09    <DIR>          vcpkg-cmake
2025/08/20  14:09    <DIR>          vcpkg-cmake-config
2025/08/20  14:31    <DIR>          vcpkg-cmake-get-vars
2025/08/20  14:09    <DIR>          zlib
库目录(编译成品)
C:\vcpkg>dir packages驱动器 C 中的卷没有标签。卷的序列号是 BE84-90DBC:\vcpkg\packages 的目录2025/08/20  14:44    <DIR>          .
2025/08/20  14:09    <DIR>          ..
2025/08/20  14:09    <DIR>          abseil_x64-windows
2025/08/20  14:31    <DIR>          detect_compiler_x64-windows
2025/08/20  14:44    <DIR>          openssl_x64-windows
2025/08/20  14:09    <DIR>          vcpkg-cmake-config_x64-windows
2025/08/20  14:31    <DIR>          vcpkg-cmake-get-vars_x64-windows
2025/08/20  14:09    <DIR>          vcpkg-cmake_x64-windows0 个文件              0 字节8 个目录 338,437,447,680 可用字节C:\vcpkg>tree packages\openssl_x64-windows
文件夹 PATH 列表
卷序列号为 000001C4 BE84:90DB
C:\VCPKG\PACKAGES\OPENSSL_X64-WINDOWS
├─bin
├─debug
│  ├─bin
│  └─lib
│      └─pkgconfig
├─include
│  └─openssl
├─lib
│  └─pkgconfig
└─share└─openssl
安装好的库
C:\vcpkg>tree installed
文件夹 PATH 列表
卷序列号为 000001EA BE84:90DB
C:\VCPKG\INSTALLED
├─vcpkg
│  ├─info
│  └─updates
└─x64-windows├─bin├─debug│  ├─bin│  └─lib│      └─pkgconfig├─include│  └─openssl├─lib│  └─pkgconfig└─share├─openssl├─vcpkg-cmake├─vcpkg-cmake-config└─vcpkg-cmake-get-vars└─cmake_get_varsC:\vcpkg>dir installed\x64-windows\bin驱动器 C 中的卷没有标签。卷的序列号是 BE84-90DBC:\vcpkg\installed\x64-windows\bin 的目录2025/08/20  14:44    <DIR>          .
2025/08/20  14:44    <DIR>          ..
2025/08/20  14:42           102,912 legacy.dll
2025/08/20  14:42           888,832 legacy.pdb
2025/08/20  14:42         5,186,048 libcrypto-3-x64.dll
2025/08/20  14:42        19,402,752 libcrypto-3-x64.pdb
2025/08/20  14:42           853,504 libssl-3-x64.dll
2025/08/20  14:42         4,149,248 libssl-3-x64.pdb6 个文件     30,583,296 字节2 个目录 338,430,484,480 可用字节

VS2017集成vcpkg

全局集成方式(非常方便,体验好)

管理员权限启动命令行,执行 vcpkg integrate install

**********************************************************************
** Visual Studio 2017 Developer Command Prompt v15.9.45
** Copyright (c) 2017 Microsoft Corporation
**********************************************************************
[vcvarsall.bat] Environment initialized for: 'x64'C:\Windows\System32>cd /C:\>cd vcpkgC:\vcpkg>vcpkg integrate install
Applied user-wide integration for this vcpkg root.
CMake projects should use: "-DCMAKE_TOOLCHAIN_FILE=C:/vcpkg/scripts/buildsystems/vcpkg.cmake"All MSBuild C++ projects can now #include any installed libraries. Linking will be handled automatically. Installing new libraries will make them instantly available.

工作原理:
这个命令做了什么?它没有修改你的任何一个项目文件,而是在系统级为Visual Studio注册了你的 vcpkg 目录。具体来说,它在 %USERPROFILE%\AppData\Local\Microsoft\MSBuild\v4.0 目录下添加了一个 .props 文件,这个文件会被所有Visual Studio C++项目自动导入。

效果:
从此以后,在任何VS2017的C++项目中,您只需要:

  1. #include <openssl/ssl.h>
  2. 在“项目属性” -> “链接器” -> “输入” -> “附加依赖项”中,简单地添加库名,例如 libssl.liblibcrypto.lib

所有头文件路径和库文件路径都会由vcpkg自动提供给项目,无需手动指定。 安装新的库后,也无需任何额外配置,即可立即在项目中使用。

验证 OpenSSL 3.5.2 在 Visual Studio 2017 中的配置

下面提供一个完整的示例,包括项目配置步骤和验证代码,用于测试 OpenSSL 3.5.2 是否正常安装并可用。

项目配置步骤
  1. 确保已完成 vcpkg 全局集成(如前所述):

    cmd

    cd c:\vcpkg
    vcpkg integrate install
    
  2. 在 Visual Studio 2017 中创建一个新的 C++ 控制台项目

  3. 配置项目属性:

    • 打开项目属性页(右键项目 → 属性)

    • 确保"平台"设置为 x64(与您安装的 OpenSSL 架构匹配)

    • 在"配置属性" → “C/C++” → "代码生成"中,将"运行库"设置为 /MT/MTd(与 OpenSSL 的编译选项匹配)

    • 在"配置属性" → “链接器” → “输入” → "附加依赖项"中添加:

      text

      libssl.lib
      libcrypto.lib
      
验证代码 (main.cpp)

cpp

#include <openssl/evp.h>
#include <openssl/err.h>
#include <openssl/ssl.h>
#include <openssl/conf.h>
#include <iostream>
#include <vector>
#include <iomanip>
#include <sstream>// 打印OpenSSL版本信息
void print_openssl_version() {std::cout << "OpenSSL版本信息:" << std::endl;std::cout << "  版本: " << OPENSSL_VERSION_TEXT << std::endl;std::cout << "  构建时间: " << OPENSSL_BUILT_ON << std::endl;std::cout << "  平台: " << OPENSSL_PLATFORM << std::endl;std::cout << "  选项: " << OPENSSL_CFLAGS << std::endl;
}// 计算字符串的MD5哈希值
std::string calculate_md5(const std::string& input) {EVP_MD_CTX* context = EVP_MD_CTX_new();if (!context) {throw std::runtime_error("无法创建MD5上下文");}if (EVP_DigestInit_ex(context, EVP_md5(), nullptr) != 1) {EVP_MD_CTX_free(context);throw std::runtime_error("无法初始化MD5摘要");}if (EVP_DigestUpdate(context, input.c_str(), input.length()) != 1) {EVP_MD_CTX_free(context);throw std::runtime_error("无法更新MD5摘要");}unsigned char hash[EVP_MAX_MD_SIZE];unsigned int lengthOfHash = 0;if (EVP_DigestFinal_ex(context, hash, &lengthOfHash) != 1) {EVP_MD_CTX_free(context);throw std::runtime_error("无法完成MD5摘要");}EVP_MD_CTX_free(context);// 将哈希值转换为十六进制字符串std::stringstream ss;for (unsigned int i = 0; i < lengthOfHash; ++i) {ss << std::hex << std::setw(2) << std::setfill('0') << static_cast<int>(hash[i]);}return ss.str();
}// 初始化OpenSSL
void init_openssl() {SSL_library_init();SSL_load_error_strings();OpenSSL_add_all_algorithms();
}// 清理OpenSSL资源
void cleanup_openssl() {EVP_cleanup();CRYPTO_cleanup_all_ex_data();
}int main() {std::cout << "开始验证OpenSSL安装..." << std::endl << std::endl;try {// 初始化OpenSSLinit_openssl();// 打印版本信息print_openssl_version();std::cout << std::endl << "测试MD5哈希计算..." << std::endl;// 测试字符串std::string test_string = "Hello, OpenSSL 3.5.2!";std::cout << "原始字符串: " << test_string << std::endl;// 计算MD5std::string md5_hash = calculate_md5(test_string);std::cout << "MD5哈希值: " << md5_hash << std::endl;// 验证已知的MD5值std::string expected_md5 = calculate_md5("Hello, OpenSSL 3.5.2!");std::cout << "预期哈希值: " << expected_md5 << std::endl;if (md5_hash == expected_md5) {std::cout << "√ MD5哈希验证成功!" << std::endl;} else {std::cout << "× MD5哈希验证失败!" << std::endl;}// 清理OpenSSLcleanup_openssl();std::cout << std::endl << "OpenSSL验证完成!" << std::endl;}catch (const std::exception& e) {std::cerr << "错误: " << e.what() << std::endl;// 打印OpenSSL错误队列char err_buf[512];ERR_error_string_n(ERR_get_error(), err_buf, sizeof(err_buf));std::cerr << "OpenSSL错误: " << err_buf << std::endl;return 1;}std::cout << std::endl << "按回车键退出...";std::cin.get();return 0;
}
输出

程序输出以下内容:

开始验证OpenSSL安装...OpenSSL版本信息:版本: OpenSSL 3.5.2 5 Aug 2025构建时间: 2平台: 3选项: 1测试MD5哈希计算...
原始字符串: Hello, OpenSSL 3.5.2!
MD5哈希值: acd08868dd770d975a2fd21f3753fe22
预期哈希值: acd08868dd770d975a2fd21f3753fe22
√ MD5哈希验证成功!OpenSSL验证完成!按回车键退出...

将 VC 工程转换为 CMake 工程并支持 Ninja 构建(vcpkg的构建方案)

创建 CMakeLists.txt 文件

在项目根目录创建 CMakeLists.txt,内容如下:

cmake

cmake_minimum_required(VERSION 3.10)# 项目名称和版本
project(openssl-sampleVERSION 1.0.0DESCRIPTION "OpenSSL Sample Project"LANGUAGES CXX
)# 设置C++标准
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)# 设置vcpkg工具链(根据您的vcpkg安装路径调整)
set(CMAKE_TOOLCHAIN_FILE "C:/vcpkg/scripts/buildsystems/vcpkg.cmake" CACHE STRING "Vcpkg toolchain file")# 查找OpenSSL包
find_package(OpenSSL REQUIRED)# 打印找到的OpenSSL信息
message(STATUS "Found OpenSSL: ${OPENSSL_VERSION}")
message(STATUS "OpenSSL include dir: ${OPENSSL_INCLUDE_DIR}")
message(STATUS "OpenSSL libraries: ${OPENSSL_LIBRARIES}")# 添加可执行文件
add_executable(${PROJECT_NAME}src/main.cpp
)# 设置目标属性
target_include_directories(${PROJECT_NAME} PRIVATE ${OPENSSL_INCLUDE_DIR})
target_link_libraries(${PROJECT_NAME} PRIVATE ${OPENSSL_LIBRARIES})# 设置输出目录(可选)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)# 安装规则(可选)
install(TARGETS ${PROJECT_NAME}RUNTIME DESTINATION binLIBRARY DESTINATION libARCHIVE DESTINATION lib
)

不顺利,放弃!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/93973.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/93973.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LLMs之MCP:Chrome MCP的简介、安装和使用方法、案例应用之详细攻略

LLMs之MCP&#xff1a;Chrome MCP的简介、安装和使用方法、案例应用之详细攻略 目录 Chrome MCP的简介 1、特点 2、与类似项目的比较 Chrome MCP的安装和使用方法 1、安装 2、使用方法 加载 Chrome 扩展 与 MCP 协议客户端一起使用 使用 STDIO 连接&#xff08;替代方…

【Java EE】多线程-初阶 synchronized 关键字 - 监视器锁 monitor lock

synchronized 关键字 - 监视器锁 monitor lock5. synchronized 关键字 - 监视器锁 monitor lock5.1 synchronized 的特性5.2 synchronized 使⽤⽰例5.3 Java 标准库中的线程安全类本节⽬标• 掌握 synchronized关键字5. synchronized 关键字 - 监视器锁 monitor lock &#xf…

Java多线程:从基础到实战

引言多线程是Java并发编程的核心技术之一&#xff0c;广泛应用于服务器开发、数据处理、实时系统等领域。通过多线程&#xff0c;程序可以充分利用CPU资源&#xff0c;提高执行效率&#xff0c;同时处理多个任务。本文将从多线程的基本概念、实现方式、线程状态、同步与通信到常…

list集合可以一边遍历一遍修改元素吗?

今天看来一下Java中list集合部分的八股&#xff0c;发现了一个以前没注意过的问题&#xff0c;记录一下list可以一边遍历一边修改元素吗&#xff1f;答&#xff1a;在 Java 中&#xff0c;List在遍历过程中是否可以修改元素取决于遍历方式和具体的List实现类。①&#xff1a;对…

Infusing fine-grained visual knowledge to Vision-Language Models

Infusing fine-grained visual knowledge to Vision-Language Models Authors: Nikolaos-Antonios Ypsilantis, Kaifeng Chen, Andr Araujo, Ondřej Chum Deep-Dive Summary: 视觉-语言模型中注入细粒度视觉知识 摘要 大规模对比预训练产生了强大的视觉-语言模型&#xf…

RK3576赋能无人机巡检:多路视频+AI识别引领智能化变革

随着工业巡检任务的复杂度不断提升&#xff0c;无人机逐渐取代传统人工&#xff0c;成为电力、能源、林业、农业等行业的“高空作业主力”。然而&#xff0c;巡检并非简单的拍摄和回放&#xff0c;它要求无人机实时采集多路画面、快速分析异常&#xff0c;并稳定回传数据。这对…

ollama Modelfile 文件生成

输入 根据如下TEMPLATE和params写一个modelfile文件&#xff0c;TEMPLATE为&#xff1a;{{- $lastUserIdx : -1 -}} {{- range $idx, $msg : .Messages -}} {{- if eq $msg.Role “user” }}{{ $lastUserIdx $idx }}{{ end -}} {{- end }} {{- if or .System .Tools }}<|i…

关联规则挖掘2:FP-growth算法(Frequent Pattern Growth,频繁模式增长)

目录 一、核心思想&#xff1a;一个形象的比喻 二、核心思想的具体拆解 步骤一&#xff1a;构建FP-tree&#xff08;频繁模式树&#xff09; 步骤二&#xff1a;从FP-tree中挖掘频繁项集 为什么这很高效&#xff1f; 三、总结 核心思想与优势 适用场景与缺点 四、例题…

在IDEA中DEBUG调试时查看MyBatis-Plus动态生成的SQL语句

在IDEA中DEBUG调试时查看MyBatis-Plus动态生成的SQL语句前言&#xff1a;动态SQL调试的痛与解决方案一、准备工作&#xff1a;调试前的检查清单二、基础方法&#xff1a;SqlSessionTemplate断点调试步骤1&#xff1a;定位SqlSessionTemplate类步骤2&#xff1a;在invoke方法上设…

Linux 文本处理三剑客:awk、grep、sed 完全指南

Linux 文本处理三剑客&#xff1a;awk、grep、sed 完全指南 1. 概述 Linux 系统提供了三个强大的文本处理工具&#xff1a;awk、grep 和 sed&#xff0c;它们各有所长&#xff0c;结合使用可以高效地处理文本数据。 awk&#xff1a;擅长文本分析和格式化输出&#xff0c;是一…

pyecharts可视化图表组合组件_Grid:打造专业数据仪表盘

pyecharts可视化图表组合组件_Grid&#xff1a;打造专业数据仪表盘 目录pyecharts可视化图表组合组件_Grid&#xff1a;打造专业数据仪表盘引言图表1&#xff1a;Grid-Overlap-多X/Y轴示例代码解析1. 图表创建2. 多轴配置3. 图表重叠4. Grid布局效果与应用图表2&#xff1a;Gri…

【电气工程学习】

三极管中&#xff1a;集电极C,基极B&#xff0c;发射极E接线&#xff1a;棕正蓝负黑信号NPN开关输出的是我们的0V,也叫低电平PNP开关输出的是24V,也就是高电平&#xff08;NPN开关导通时&#xff0c;相当于把输出端“拉”到0V&#xff08;低电平&#xff09;&#xff0c;称为“…

【嵌入式】CAN通信

CAN 总线最初由博世于1980年代为汽车行业开发&#xff0c;能够简化复杂的布线网络&#xff0c;还确保可靠和安全的数据传输。 1.CAN技术解释 CAN网络中的每个节点&#xff0c;都是平等的&#xff0c;没有主次之分&#xff0c;这一点和SPI和I2C不同。每个节点都可以在需要的时…

Apache ShenYu网关与Nacos的关联及如何配合使用

Apache ShenYu 网关与 Nacos 之间的关系可以概括为 “协作互补”:Nacos 作为 服务注册与配置中心,为 ShenYu 提供动态的服务发现和配置管理能力,而 ShenYu 作为 流量网关,依赖 Nacos 实现路由信息的动态更新和实时生效。以下是详细解析: 1. 核心关系图解 拉取服务列表/路…

【CPP】一个CPP的Library(libXXXcore)和测试程序XXX_main的Demo

一个CPP的Library和测试程序Demo 1. 思路描述 目录结构 总控CMakeList.txt文件 2. Library代码实现 2.1 XXXLib.hpp文件(对外的接口定义文件)和XXXLib.cpp文件 2.1.1 XXXLib.hpp文件 2.1.2 XXXLib.cpp文件 2.2 CXXXLibApi.hpp文件和CXXXLibApi.cpp文件(内部的API基类) 2.2.1 CX…

【YashanDB认证】学习YashanDB的探索之路:从入门到实践

在国产数据库蓬勃发展的浪潮中&#xff0c;选择了YashanDB作为技术学习的切入点。这不仅让我深入了解了数据库的核心技术&#xff0c;也让我深刻体会到国产数据库在性能、可靠性和生态适配上的创新价值。以下是我在学习YashanDB过程中的经验与感悟。 一、YashanDB基础介绍 Ya…

element UI 和 element plus 在组件上有哪些不同

Element UI 和 Element Plus 都是基于 Vue 的桌面端 UI 组件库&#xff0c;由同一团队&#xff08;饿了么前端团队&#xff09;开发和维护。Element Plus 是 Element UI 的升级版&#xff0c;专为 Vue 3 设计&#xff0c;而 Element UI 仅支持 Vue 2。以下是它们在组件层面的主…

【3D重建技术】如何基于遥感图像和DEM等数据进行城市级高精度三维重建?

城市级高精度三维重建是融合多源空间数据&#xff08;遥感图像、DEM、GIS矢量等&#xff09;、计算机视觉与地理信息处理技术的复杂过程&#xff0c;核心目标是构建包含“地形地物&#xff08;建筑、道路、植被等&#xff09;”的真实、高精度三维场景。其流程可分为数据准备、…

【unitrix数间混合计算】3.4 无符号小数部分标记trait(bin_unsigned.rs)

一、源码 这段代码定义了一个类型级二进制小数系统&#xff0c;用于在编译时表示和验证二进制小数部分的有效性。 use crate::number::{F0, BFrac, Bit};/// 标记合法的二进制小数部分类型 pub trait BinFrac: Copy Default static {}// 空小数部分&#xff08;表示值为0&…

从一次 DDoS 的“死亡回放”看现代攻击链的进化

本文记录的是作者上周在测试环境真实踩到的坑。为了让读者能复现并亲手体验防御思路&#xff0c;文末给出了一份最小可运行的 Go 脚本&#xff0c;支持本地压测 日志回放&#xff0c;方便对比加防护前后的差异。攻击现场还原 周一凌晨 2:14&#xff0c;监控群里突然弹出告警&a…