LoginSignup
48
49

More than 5 years have passed since last update.

vcpkgを使ってみた

Last updated at Posted at 2017-08-07

vcpkgというWindows 用のC++パッケージマネージャーが公開されてます。
Github
ドキュメント
それを使ったときのノートです。
ceresのインストールが圧倒的に簡単で感動したので。あとqiitaになかったので。

vcpkg機能の説明はここが網羅していました。
TechRacho 【速報】Vcpkg: Windowsの公式C++ライブラリ管理ツール

  • vs2017、vs2015 update3 以降 (faqより)
    ⇔ vs2010/2012/2013 では"integrate install"のコマンドを実行しても、includeやlibの依存を解決してくれなかった。
  • (オプション) CMake 3.8

    MSBuild/CMakeが優先的に使われる。
    らしいけれども、CMakeインストール済み環境で試したので、どのように動作が切り替わるか、は不明。

  • nuget との関係
    visual studioで利用できるパッケージシステムに、nugetというのもある。
    どちらも、開発用のパッケージシステム。
    nuget は基本的にdotnet用。ビルド済みのバイナリを配布する用途
    vcpkg はvc専用のパッケージシステム。ソースコードを配布して、各所でビルドして使ってもらう。

使ってみる

vcpkg の install

  1. Githubからcloneする。

  2. クローンディレクトリの"bootstrap-vcpkg.bat"を実行する。
    → "vcpkg.exe"が生成される。

  3. (visual studioに統合する場合)そこのフォルダで管理者権限で cmd を実行して以下のコマンドを入力。
    cmd
    .\vcpkg.exe integrate install

    これはユーザーごとに行う。

ライブラリのインストール

利用する前に、必要なライブラリをインストールする必要があります。

  • vcpkg search [名前] で利用可能なパッケージやその名前を持った利用可能ライブラリが列挙される

  • 依存は移動で解決してくれる。

  • x64のみ、他のパッケージが必要といったライブラリもある。

    • ceres は x64のみ
    • vtkをインストールすると、msmpiが無いとエラーになる。

zlibの64bit-dll をインストールするとき
cmd
.\vcpkg install zlib:x64-windows

libpng の 32bit,staticライブラリ をインストールするとき

→ zlib は自動で依存解決してくれる。
cmd
.\vcpkg install libpng:x86-windows-static

ライブラリを使う

vcでintegrate install をしてあるとき

インストール済みのライブラリが自動で利用可能になる。
"#include " と書くと自動で解決、dllのコピーなどをやってくれる。
(既定の追加のインクルードディレクトリに、"$(VcpkgRoot)include\"というものが増えている。)

入り組んだインクルード関係の時
$(VcpkgRoot) という vcのマクロが今の環境で読み込んでいるフォルダへのパス
"C:\dev\sources\vcpkg\installed\x86-windows\" など

example:
'#include <pybind11\pybind11.h> としてインクルードする。内部で
'#include <python3.h> をインクルードしているので、ファイルが見つけられなくてエラーになる。

vcの追加のインクルードフォルダに $(VcpkgRoot)include\python3.6\; を書いておくと、ちゃんと見つけてもらえる。

CMake から使うとき

ここに書いてある。github Example: Using Sqlite#CMake (Toolchain file)

込み入った使い方

このプロジェクトでは、特定のバージョンのライブラリを使う必要があるとき

doc "プロジェクトごと"より

ライブラリの "profile.cmake"を書き換えればできるらしい。

  1. 専用にvcpkgをクローンする。
  2. ライブラリの profile.cmake のバージョンを書き換える。
  3. このプロジェクト用に integrate する。
    cmd vcpkg integrate project

自分の環境の vcpkg をほかの人に渡す

vcpkg export (ライブラリ) --zip
→ zipが作られる
--nuget オプションでnugetパッケージが作られる。

vcpkg integrate project すると何が起きたかのメモ

>> vcpkg integrate project

Created nupkg: d:\dev\vcpkg\scripts\buildsystems\vcpkg.d.dev.vcpkg.1.0.0.nupkg

With a project open, go to Tools->NuGet Package Manager->Package Manager Console and paste:
    Install-Package vcpkg.d.dev.vcpkg.1.0.0.nupkg -Source "d:\dev\vcpkg\scripts\buildsystems"

書いてある通り、vs2017を起動して、「ツール」⇒「NuGetパッケージマネージャー」⇒「パッケージマネージャー コンソール」を起動。
ペーストしろと書いてあるコマンド
「Install-Package vcpkg.d.dev.vcpkg.1.0.0.nupkg -Source "d:\dev\vcpkg\scripts\buildsystems"」
を張り付けると、既定のプロジェクトに上記のnupkg参照が追加される。

。。。

じゃあそのnupkgは何者かと思ったので中身を調べると、[vcpkgのフォルダ]scripts\buildsystems\msbuild\vcpkg.targets を取り込むnupkg

そのvcpkg.targets ファイルの中身は、"vcpkg integrate project" を呼び出したvcpkgのinclude/libフォルダへの参照をプロジェクトファイルに追加しているだけ。

出力フォルダへDLLのコピーとか、libファイルのlinkなどの処理も入っていた。

todo

private パッケージの作り方

48
49
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
48
49