MSYSのGCCでconanを使ってパッケージ(ライブラリー)を管理したい!
概要
今回の記事では、MSYSのGCCでconanを使ってパッケージ(ライブラリ)を管理する手順を掲載する。
Visual Studioで使えるパッケージマネージャーvcpkgを使う手順は、下記の記事に掲載してます。
仕様書
環境
- gcc: 9.2.0
- Python: 3.11.5
- pip: 24.3.1
- Conan: 2.11.0
手順書
「環境構築編」と「プロジェクト設定編」の2部構成です。
環境構築編
この記事ではMSYS2のGCCを使うので、先にMSYS2をインストールしておく。インストールの手順については下記の記事に掲載してます。
CRT環境のGCC
とMAKE
を使うので、MSYS2環境でインストールする。
pacman -S mingw-w64-x86_64-gcc mingw-w64-x86_64-make
conan
のインストールにpip
が必要で、pip
を使うのにPythonが必要になる。PythonをWindowsにインストールに方法はいろいろあるんだけども、私は下記の記事のようにpuenv
を使ってる。
pip
を使ってグローバルにconan
をインストールする。
pip install conan
インストールされるとコマンドconan
が使えるようになる。インストールされたバージョンを確認してみる。
conan --version
cmake
も使うので公式サイトからインストーラーをダウンロードしてインストールする。
conan
を使うにはprofileが必要になる。このprofileを切り替えて、GCC
を使ったり、Visual Studio
を使ったりする。
UCRT64環境のGCC
用のprofileを作る。
conan profile detect --name=ucrt64_gcc
このプロファイルはユーザーディレクトリーの.conan2
の中に生成される。
C:\Users\<username>\.conan2\ucrt64_gcc
私の環境ではデフォルトの設定としてVisual Studioのコンパイラーを使うようになってたので、これをUCRT64環境のGCC
を使うよう修正する。
[settings]
os=Windows
compiler=gcc
compiler.version=14
compiler.libcxx=libstdc++11
compiler.threads=posix
compiler.exception=sjlj
arch=x86_64
build_type=Release
[buildenv]
PATH+=(path)C:/msys64/mingw64/bin
CXX=C:/msys64/mingw64/bin/g++
プロジェクト設定編
公式のサイトにあるチュートリアルのサンプルのプロジェクトのコードを参考して必要なファイルを作成してきます。
プロジェクトの構成は下記のような感じ。
.
├── 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のpofileを指定する。
conan install . --profile=ucrt64_gcc --output-folder=build --build=missing
ディレクトリーbuild
が生成され、その中にビルドに必要なファイルが生成される。
をcmake
を使ってプロジェクトをビルドする。
cd build
cmake .. -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE="conan_toolchain.cmake"
cmake --build . --config Release
ビルドが成功するとbuild/compressor.exe
が生成される。
compressor.exe
を実行してみる。
compressor.exe
下記にような感じで出力されればOKだ!
Uncompressed size is: 233
Compressed size is: 147
ZLIB VERSION: 1.2.11
まとめ(感想文)
cmake
の学習が必要そうだと思った今日この頃。