【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
英文地址,請注明出處:http://en.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…