【Visual Studio/C】conanでパッケージを管理する

ネコニウム研究所

PCを利用したモノづくりに関連する情報や超個人的なナレッジを掲載するブログ

【Visual Studio/C】conanでパッケージを管理する

2024-10-8 | ,

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

まとめ(感想文)

う~ん。複雑。