【Visual Studio/C】conanでパッケージを管理する
Visual StudioのC++のプロジェクトでconanを使ってパッケージ(ライブラリ)を管理したい!
概要
今回の記事では、Visual StudioのC++のプロジェクトでconanを使ってパッケージ(ライブラリ)を管理する手順を掲載する。
C++のパッケージマネージャーはいくつか候補があって、vcpkgを使う手順は、下記の記事に掲載してます。
仕様書
環境
- Visual Studio Community 2022 (64 ビット): Version 17.12.3
- cmake: 3.31.3
- Python: 3.11.5
- pip: 24.3.1
- conan: 2.11.0
手順書
conan
の公式サイトのチュートリアルを参考にしつつ、Windowsでconanを使えるようにする。
「環境構築編」と「プロジェクト設定編」の2部構成です。
環境構築編
conan
のインストールにpip
が必要で、pip
を使うのにPythonが必要になる。PythonをWindowsにインストールに方法はいろいろあるんだけども、私は下記の記事のようにpuenv
を使ってる。
pip
を使ってグローバルにconan
をインストールする。
pip install conan
インストールされるとコマンドconan
が使えるようになる。インストールされたバージョンを確認してみる。
conan --version
cmake
も使うので公式サイトからインストーラーをダウンロードしてインストールする。
conan
を使うにはprofileが必要になる。このprofileを切り替えて、GCC
を使ったり、Visual Studio
を使ったりする。
デフォルトのプロファイルを作る。
conan profile detect --force
Visual Studio Community 2022がインストールされてる環境だと下記のような感じで認識して、それを使うプロファイルが自動で生成される。
detect_api: Found msvc 17
Detected profile:
[settings]
arch=x86_64
build_type=Release
compiler=msvc
compiler.cppstd=14
compiler.runtime=dynamic
compiler.version=194
os=Windows
このプロファイルはユーザーディレクトリーの.conan2
の中に生成される。
C:\Users\<username>\.conan2\profiles
プロジェクト設定編
チュートリアルではサンプルのプロジェクトをgitでクローンしてくる手順になってるんだけども、この記事では自力で必要なファイルを作成してきます。
プロジェクトの構成は下記のような感じ。
.
├── CMakeLists.txt
├── conanfile.txt
└── src
└── main.c
main.c
の中身はこんな感じ。
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <zlib.h>
int main(void) {
char buffer_in [256] = {"Conan is a MIT-licensed, Open Source package manager for C and C++ development "
"for C and C++ development, allowing development teams to easily and efficiently "
"manage their packages and dependencies across platforms and build systems."};
char buffer_out [256] = {0};
z_stream defstream;
defstream.zalloc = Z_NULL;
defstream.zfree = Z_NULL;
defstream.opaque = Z_NULL;
defstream.avail_in = (uInt) strlen(buffer_in);
defstream.next_in = (Bytef *) buffer_in;
defstream.avail_out = (uInt) sizeof(buffer_out);
defstream.next_out = (Bytef *) buffer_out;
deflateInit(&defstream, Z_BEST_COMPRESSION);
deflate(&defstream, Z_FINISH);
deflateEnd(&defstream);
printf("Uncompressed size is: %lu\n", strlen(buffer_in));
printf("Compressed size is: %lu\n", strlen(buffer_out));
printf("ZLIB VERSION: %s\n", zlibVersion());
return EXIT_SUCCESS;
}
CMakeLists.txt
の中身はこんな感じ。
cmake_minimum_required(VERSION 3.15)
project(compressor C)
find_package(ZLIB REQUIRED)
add_executable(${PROJECT_NAME} src/main.c)
target_link_libraries(${PROJECT_NAME} ZLIB::ZLIB)
conanfile.txt
の中身はこんな感じ。
[requires]
zlib/1.2.11
[generators]
CMakeDeps
CMakeToolchain
conanfile.txt
にプロジェクトの依存関係を保管するのだと思われ。このプロジェクトはzlib
のバージョン1.2.11
に依存してる。
依存してるライブラリーをインストールするためのファイルを生成する。
conan install . --output-folder=build --build=missing
ディレクトリーbuild
が生成され、その中にビルドに必要なファイルが生成される。
cmake
を使ってプロジェクトをビルドする。
cd build
cmake .. -G "Visual Studio 17 2022" -DCMAKE_TOOLCHAIN_FILE="conan_toolchain.cmake"
cmake --build . --config Release
ビルドが成功するとbuild/Release/compressor.exe
が生成される。
compressor.exe
を実行してみる。
cd Release
compressor.exe
下記にような感じで出力されればOKだ!
Uncompressed size is: 233
Compressed size is: 147
ZLIB VERSION: 1.2.11
まとめ(感想文)
う~ん。複雑。