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

介紹一個超級無敵好用的 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

--

--

--

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Allen Kuo (kwyshell)

Allen Kuo (kwyshell)

More from Medium

MEP Stefan Berger: ‘Yes, we need regulations, but you still have to leave room to breathe’

Linked List

I am Falling in Love