Vcpkg 簡介。一個讓你快速引用開源的超強工具。

Allen Kuo (kwyshell)
4 min readApr 19, 2020

介紹一個超級無敵好用的 C/C++ 函式庫管理工具。如何使用與安裝可以參考:
https://github.com/microsoft/vcpkg

如果你在Windows上開發C++的專案,想要引用一些開源的代碼,首先你一定是找找有沒有已經編譯好的版本。就算你找到一個編譯好的版本,也常常要面臨該發行的版本是否能正常支援你的C++編譯環境。如果沒有,你的下一個動作就是可能就是要下載原始碼來到你的環境,用你目前的編譯環境重新編譯代碼。但是很有可能,這些開源環境根本無法採用你目前的編譯環境(比方 Visual Studio 2019 C++)來工作。於是乎,你就得開始折騰如何讓這些開源能在你的環境上正常工作。 結果就是,你花了一堆時間,根本都還沒開始觸碰到你真正工作部分。

相信每個人或多或少都有類似這樣的痛苦經驗。然而,這些工作到了Linux環境變得超級無敵容易。

sudo apt-get install clang-4.0 lldb-4.0
sudo apt install -y bc build-essential ccache curl imagemagic

然後,在你的 makefile 引用這些 headers 與 libs 就完成這些工作。這對於在Windows工作的人實在羨慕不已。當然Windows環境自然有其別的優勢。這不是本文的重點。

安裝包的概念,在許多程式語言都是基本功能:

go get -u github.com/xxx/go-curlgo
python pip install
npm install electron

幾乎每個語言都有會自己的內建package管理設計,但是 C/C++ 就是一個這麼原始又固執的語言。他扮演的腳色幾乎就是負責底層與基礎方面的打造工作。

為了解決各種auto make的各自為政,CMake這個工具被提出來,做為中繼與再生成目標make 環境的重要工具。這有點像 LLVM 扮演 IR 與 IL 的過程。隨著越來越多的專案開始支持 CMake,如今幾乎主流的專案都能用 CMake 來完成編譯。

也正因為 CMake 逐步被大多數專案給支持,這也促成了 VCPKG 成為了可能。說了半天,到底VCPKG是甚麼呢? VCPKG 就是微軟為了打造一個類似 Package 管理工具並且能運行於 Windows 下,且與 Visual Studio 完美結合的工具。當然VCPKG的企圖不僅止於 Windows,目前也能運行於 Linux 與 macOS 上。

.\vcpkg install boost qt openssl wxwidgets

上述指令就讓你完成了 boost、QT5、OpenSSL 與 wxWidgets 安裝。回到你自己的專案,你甚麼也都不需要設定,就能直接使用這些代碼了。

#include <boost/interprocess/sync/named_mutex.hpp>
#include <boost/interprocess/sync/scoped_lock.hpp>
#include <boost/interprocess/detail/os_thread_functions.hpp>
#include <openssl/evp.h>#include <openssl/aes.h>
boost::interprocess::named_mutex mutex(boost::interprocess::open_or_create, info->resourcename); boost::interprocess::scoped_lock<boost::interprocess::named_mutex> lock(mutex,boost::interprocess::try_to_lock);
...
AES_set_encrypt_key(user_key, 128, &key) < 0);
...

你幾乎完全不用折騰之前那些繁瑣工作。要知道由原代碼開始編譯一套QT、boost 或是 OpenSSL 是非常累人的工作。而且這些工作,都只是在環境建構而已。何必把時間花在這些惱人的事物上呢!

下次就在自己的專案上用上VCPKG,保證你省下大把的時間!

延伸閱讀:
Vcpkg 線上文件
如何在Vcpkg使用特定版本函式庫
Using Specified Lib Version in Vcpkg

--

--