iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 18
2
Software Development

C++ 30天屠龍記系列 第 18

C++ 30天屠龍記(第18天): 學會vcpkg 套件管理器

  • 分享至 

  • xImage
  •  

在C++中使用套件管理器是頗為困難的事情,所以我需要另加一章去描述,難在哪呢?

其實就是難在C++的套件管理庫都離不開Cmake,但Cmake本身的套件管理確實比較複雜,所以就需要一日的篇幅。那好,在使用喔vcpkg之前我起碼需要知道怎麼安裝吧!?

vcpkg

第一步就是選好你想安裝vcpkg的地方,Unix裡多數人都會放在User profile裡面,也就是~/,而Windows用戶則多數放在D:/或者C:/,視乎你的需求

第二步就是複製vcpkg 到你先選定的目錄,我假定是~/

git clone https://github.com/microsoft/vcpkg.git vcpkg

第三步就是安裝了

cd vcpkg
./bootstrap-vcpkg.sh # Unix 用戶
.\bootstrap-vcpkg.bat #Windows 用戶

等待幾分鐘,安裝完成後可以先尋找一個庫,然後安裝,如

./vcpkg search fmt
./vcpkg install fmt

這樣,我們就安裝了fmt庫了,那麼,該怎麼import進C++專案呢?

  1. 在你的Project中新建一個CMakeLists.txt

    # 這是使用的Cmake版本,這裡是3.1 - 3.15,可以支援>=11版本的C++
    cmake_minimum_required(VERSION 3.1...3.15)
    
    # 你的主程序名
    set(targets "hello")
    # 你的專案資料,可以隨便寫
    set(proj_name "modules")
    set(ver "0.1")
    
    # 選擇C++17版本
    set(lang "CXX")
    set(lang_ver "17")
    
    # 你的專案名字 版本 編程語言(CXX是C++)
    project(${proj_name} VERSION ${ver} LANGUAGES ${lang})
    
    # 可執行檔名字 主檔名字
    add_executable(${targets} ${targets}.cpp)
    
    # 我們用的C++是 17版本的
    target_compile_features(${targets} PUBLIC cxx_std_${lang_ver})
    set_target_properties(${targets} PROPERTIES CXX_EXTENSIONS OFF)
    
    # 加上 fmt 函式庫
    find_package(fmt CONFIG REQUIRED)
    target_link_libraries(${targets} PRIVATE fmt::fmt fmt::fmt-header-only)
    
    
    
  2. 在你的Project中新建一個Makefile

    all: builds run
    
    init:
    	mkdir -p build; \
    	cd build; \
    	cmake .. -DCMAKE_TOOLCHAIN_FILE="你的VCPKG位置/vcpkg/scripts/buildsystems/vcpkg.cmake"
    
    builds:
    	cmake --build build
    
    run:
    	./build/main
    
    clean:
    	rm -rf build
    
    • 你的VCPKG位置要改成 你安裝VCPKG的位置喔,例如~/vcpkg/scripts/buildsystems/vcpkg.cmake
    • 然後運行 make init
  3. 如果是Windows用戶也不要緊,在Project 新建一個 init.ps1,先吧程序編譯好

    mkdir -p build
    cd build
    cmake .. -DCMAKE_TOOLCHAIN_FILE="你的VCPKG位置/vcpkg/scripts/buildsystems/vcpkg.cmake"
    cd ../
    cmake --build build
    

    然後運行

    ./build/main
    
  4. 在你的C++檔案中打上

    #include<iostream>
    #include<string>
    #include "fmt/format.h"
    
    using fmt::print;
    using fmt::format;
    using namespace std;
    
    int main(){
        auto name = "Alan"s;
        print("你好{0},很高興見到你們?\n",name);
    }
    
  5. 然後再build和run

    make 
    
  6. Windows用戶則是

    cmake --build build
    ./build/main
    
  7. 如果看見

    你好Alan,很高興見到你們?
    
  8. 那就代表成功了?


上一篇
C++ 30天屠龍記(第17天): 一文學會C++ Cmake
下一篇
C++ 30天屠龍記(第19天): 今天的新文更新
系列文
C++ 30天屠龍記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言