vcpkg

Setup

global

使用套件管理器下載,如 apt, scoop

  1. scoop
    ​​​​scoop install vcpkg
    

project

  1. 到你的專案目錄

    ​​​​cd project
    
  2. 使用 git clone 下載 vcpkg

    ​​​​git clone https://github.com/microsoft/vcpkg.git
    
  3. 進到 vcpkg 目錄

    ​​​​cd vcpkg
    
  4. 下載 vcpkg.exe

    ​​​​./boostrap-vcpkg.bat
    

Install

抱歉了,宇宙第一神 IDE:Visual Studio(Windows 平台預設構建工具)。
此處範例:

  • 構建工具:mingw
  • 靜態鏈結:x64-mingw-static
  • 練手用的三方庫:jsoncpp(處理 JSON 的三方庫)

註:也可以使用 x64-mingw-dynamic 動態鏈結的方式,執行檔會小很多。
但執行檔會仰賴 DLL 執行,必須將它們放至與執行檔同一目錄,執行檔才可執行。
所有 DLL 所在目錄:./vcpkg/installed/x64-mingw-dynamic/bin

example

// main.cpp #include <iostream> #include <json/json.h> int main() { std::string jsonString = R"({ "name": "Alice", "age": 30, "isStudent": false, "courses": ["Math", "Science", "History"] })"; Json::Reader reader; Json::Value root; if (reader.parse(jsonString, root)) { std::string name = root["name"].asString(); int age = root["age"].asInt(); bool isStudent = root["isStudent"].asBool(); const Json::Value courses = root["courses"]; std::cout << "Name: " << name << std::endl; std::cout << "Age: " << age << std::endl; std::cout << "Is Student: " << (isStudent ? "Yes" : "No") << std::endl; std::cout << "Courses: "; for (const auto& course : courses) { std::cout << course.asString() << " "; } std::cout << std::endl; } else { std::cerr << "Error parsing JSON!" << std::endl; } return 0; }

global

  1. command line

    ​​​​vcpkg install jsoncpp --host-triplet x64-mingw-static
    

    安裝完成後,應該可以在最後看到一些指示。
    它會指導你,這個三方庫應該如何加入 CMakeLists.txt。

    ​​​​jsoncpp provides CMake targets:
    
    ​​​​# this is heuristically generated, and may not be correct
    ​​​​find_package(jsoncpp CONFIG REQUIRED)
    ​​​​target_link_libraries(main PRIVATE JsonCpp::JsonCpp)
    
  2. CMakeLists.txt

    ​​​​cmake_minimum_required(VERSION 3.17) ​​​​project(vcpkg_mingw_demo) ​​​​set(CMAKE_C_COMPILER gcc) ​​​​set(CMAKE_CXX_COMPILER g++) ​​​​set(CMAKE_CXX_STANDARD 17) ​​​​set(CMAKE_TOOLCHAIN_FILE $ENV{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake) ​​​​set(VCPKG_TARGET_TRIPLET x64-mingw-static) ​​​​set(jsoncpp_DIR $ENV{VCPKG_ROOT}/installed/x64-mingw-static/share/jsoncpp) ​​​​find_package(jsoncpp CONFIG REQUIRED) ​​​​add_executable(main main.cpp) ​​​​target_link_libraries(main PRIVATE JsonCpp::JsonCpp)

project

  1. command line

    ​​​​./vcpkg.exe install jsoncpp --host-triplet x64-mingw-static
    
  2. .vscode/settings.json

    讓 IDE 能正確抓到三方庫的位置(在專案內)

    ​​​​{ ​​​​ "C_Cpp.default.includePath": [ ​​​​ "${workspaceFolder}/**", ​​​​ "./vcpkg/installed/x64-mingw-static/include" ​​​​ ], ​​​​}
  • CMakeLists.txt

    ​​​​cmake_minimum_required(VERSION 3.17) ​​​​project(vcpkg_mingw_demo) ​​​​set(CMAKE_C_COMPILER gcc) ​​​​set(CMAKE_CXX_COMPILER g++) ​​​​set(CMAKE_CXX_STANDARD 17) ​​​​set(VCPKG_TARGET_TRIPLET x64-mingw-static) ​​​​set(CMAKE_TOOLCHAIN_FILE ./vcpkg/scripts/buildsystems/vcpkg.cmake) # ✅ ​​​​set(jsoncpp_DIR ./vcpkg/installed/x64-mingw-static/share/jsoncpp) # ✅ ​​​​find_package(jsoncpp CONFIG REQUIRED) ​​​​add_executable(main main.cpp) ​​​​target_link_libraries(main PRIVATE JsonCpp::JsonCpp)