CMake ModulesにおけるFindFreetypeプログラミング解説


使用方法

FindFreetypeモジュールを使用するには、以下の手順が必要です。

  1. CMakeLists.txtファイルにFindFreetypeモジュールをロードします。
find_package(Freetype REQUIRED)
  1. Freetypeライブラリを使用するターゲットに、必要なヘッダーファイルとライブラリファイルをリンクします。
target_link_libraries(mytarget Freetype::Freetype)

オプション

FindFreetypeモジュールは、いくつかのオプションを提供しています。これらのオプションを使用して、Freetypeライブラリの検索場所を指定したり、特定のバージョンのライブラリを要求したりできます。

オプションの例

  • Freetypeライブラリの検索場所を指定する:
find_package(Freetype REQUIRED PATHS "/usr/local/lib")
  • 特定のバージョンのFreetypeライブラリを要求する:
find_package(Freetype REQUIRED VERSION 2.10.0)

FindFreetypeモジュールの詳細

FindFreetypeモジュールの詳細については、CMakeドキュメントを参照してください。

以下の例は、Freetypeライブラリを使用してテキストをレンダリングするシンプルなCMakeプロジェクトを示しています。

cmake_minimum_required(VERSION 3.10)

project(freetype_example)

find_package(Freetype REQUIRED)

add_executable(freetype_example freetype_example.cpp)
target_link_libraries(freetype_example Freetype::Freetype)
#include <Freetype.h>

int main() {
  FT_Library library;
  FT_Face face;

  if (FT_Init_FreeType(&library)) {
    return 1;
  }

  if (FT_Load_Face(library, "font.ttf", FT_LOAD_TARGET_NORMAL, &face)) {
    FT_Done_FreeType(library);
    return 1;
  }

  // ...テキストをレンダリングする...

  FT_Done_Face(face);
  FT_Done_FreeType(library);

  return 0;
}

この例では、find_package(Freetype REQUIRED) コマンドを使用してFindFreetypeモジュールをロードし、target_link_libraries(freetype_example Freetype::Freetype) コマンドを使用してFreetypeライブラリをターゲットにリンクします。

  • FindFreetypeモジュールは、ほとんどのプラットフォームで動作します。


cmake_minimum_required(VERSION 3.10)

project(freetype_example)

find_package(Freetype REQUIRED)

add_executable(freetype_example freetype_example.cpp)
target_link_libraries(freetype_example Freetype::Freetype)
#include <Freetype.h>

int main() {
  FT_Library library;
  FT_Face face;

  if (FT_Init_FreeType(&library)) {
    return 1;
  }

  if (FT_Load_Face(library, "font.ttf", FT_LOAD_TARGET_NORMAL, &face)) {
    FT_Done_FreeType(library);
    return 1;
  }

  // フォントのサイズを設定
  FT_Set_Pixel_Size(face, 24, 24);

  // 文字列を描画する
  FT_Glyph glyph;
  if (FT_Load_Glyph(face, 'A', FT_LOAD_TARGET_NORMAL)) {
    FT_Done_Face(face);
    FT_Done_FreeType(library);
    return 1;
  }

  if (FT_Render_Glyph(face, &glyph)) {
    FT_Done_Face(face);
    FT_Done_FreeType(library);
    return 1;
  }

  // グリフのピクセルデータを取得
  FT_Bitmap bitmap = glyph.bitmap;
  int width = bitmap.width;
  int height = bitmap.rows;
  unsigned char *buffer = bitmap.buffer;

  // ピクセルデータをレンダリングする
  for (int y = 0; y < height; ++y) {
    for (int x = 0; x < width; ++x) {
      unsigned char pixel = buffer[y * width + x];
      // ... ピクセルをレンダリング ...
    }
  }

  FT_Done_Glyph(face, &glyph);
  FT_Done_Face(face);
  FT_Done_FreeType(library);

  return 0;
}

このコードは、以下の手順を実行します。

  1. Freetypeライブラリを初期化する
  2. フォントファイルをロードする
  3. フォントのサイズを設定する
  4. 文字列を描画する
  5. グリフのピクセルデータを取得する
  6. ピクセルデータをレンダリングする
  7. Freetypeライブラリを終了する
cmake_minimum_required(VERSION 3.10)

project(freetype_example)

find_package(Freetype REQUIRED PATHS "/usr/local/lib" VERSION 2.10.0)

add_executable(freetype_example freetype_example.cpp)
target_link_libraries(freetype_example Freetype::Freetype)

このコードは、以下のことを行います。

  • バージョン2.10.0以上のFreetypeライブラリを要求する
  • Freetypeライブラリの検索場所を/usr/local/libに設定する


手動でヘッダーファイルとライブラリファイルをリンクする

FindFreetypeモジュールを使用せずにFreetypeライブラリを使用するには、次の手順を実行する必要があります。

  1. Freetypeライブラリのヘッダーファイルとライブラリファイルをプロジェクトに含めます。
  2. ターゲットにヘッダーファイルとライブラリファイルをリンクします。

cmake_minimum_required(VERSION 3.10)

project(freetype_example)

set(FREETYPE_INCLUDE_DIR "/usr/local/include/freetype2")
set(FREETYPE_LIB_DIR "/usr/local/lib")

add_executable(freetype_example freetype_example.cpp)
target_include_directories(freetype_example PRIVATE ${FREETYPE_INCLUDE_DIR})
target_link_libraries(freetype_example ${FREETYPE_LIB_DIR}/libfreetype.a)
  • ターゲットにヘッダーファイルとライブラリファイルをリンクする
  • Freetypeライブラリのライブラリファイルの場所を/usr/local/libに設定する
  • Freetypeライブラリのヘッダーファイルの場所を/usr/local/include/freetype2に設定する

この方法は、FindFreetypeモジュールよりも柔軟性がありますが、より多くの作業が必要です。

pkg-configを使用する

pkg-configは、Unixシステムでソフトウェアライブラリを検出および設定するためのツールです。Freetypeライブラリは、pkg-configファイルを提供しています。pkg-configを使用してFreetypeライブラリを検出および設定するには、次のコマンドを実行する必要があります。

pkg-config --libs freetype2

このコマンドは、Freetypeライブラリをリンクするために必要なライブラリフラグを出力します。

cmake_minimum_required(VERSION 3.10)

project(freetype_example)

find_package(PkgConfig REQUIRED)

pkg_check_modules(FREETYPE libfreetype2)

add_executable(freetype_example freetype_example.cpp)
target_link_libraries(freetype_example ${FREETYPE_LIBS})
  • ターゲットにFreetypeライブラリをリンクする
  • Freetypeライブラリを検出する
  • pkg-configモジュールをロードする

この方法は、FindFreetypeモジュールよりも簡潔ですが、pkg-configがインストールされている必要があります。

Conanを使用する

Conanは、C++開発者向けのオープンソースのパッケージマネージャーです。Freetypeライブラリは、Conanパッケージとして提供されています。Conanを使用してFreetypeライブラリを検出および設定するには、次のコマンドを実行する必要があります。

conan install freetype/2.10.4@bincrafters/stable

このコマンドは、FreetypeライブラリをConanパッケージマネージャーにインストールします。Conanを使用してFreetypeライブラリをCMakeプロジェクトにリンクするには、次のCMakeLists.txtファイルを使用する必要があります。

cmake_minimum_required(VERSION 3.10)

project(freetype_example)

requires conan

list(APPEND CMAKE_MODULE_PATH ${CONAN_CMAKE_MODULE_PATH})

find_package(Freetype REQUIRED)

add_executable(freetype_example freetype_example.cpp)
target_link_libraries(freetype_example Freetype::Freetype)
  • ターゲットにFreetypeライブラリをリンクする
  • Freetypeライブラリを検出する
  • Conanモジュールをロードする

この方法は、FindFreetypeモジュールよりも簡潔で、Freetypeライブラリ以外のライブラリも管理できます。

FindFreetypeモジュールは、Freetypeライブラリを検出および設定するための最も簡単な方法です。しかし、より多くの制御が必要な場合は、手動でヘッダーファイルとライブラリファイルをリンクしたり、pkg-configやConanを使用したりすることができます。

  • [Freetypeドキュメント](https://freetype.