このページの内容

使い始める

Compiler Explorerで、{fmt}の例をオンラインでコンパイルして実行できます。

{fmt}はどのビルドシステムでも使えます。次の節ではCMakeでの使い方を説明し、ビルドシステムの節ではその他を扱います。

CMake

{fmt}は3つのCMakeターゲットを提供します。標準のコンパイル済みライブラリにはfmt::fmt、C++モジュールライブラリにはfmt::fmt-module、ヘッダーのみのライブラリにはfmt::fmt-header-onlyを使います。ビルド時間を短縮するため、コンパイル済みライブラリまたはモジュールライブラリの使用を推奨します。

CMakeで{fmt}を使う主な方法は3つあります:

  • FetchContent:CMake 3.11以降では、FetchContentを使い、構成時に依存関係として{fmt}を自動的にダウンロードできます:

    include(FetchContent)
    
    FetchContent_Declare(
      fmt
      GIT_REPOSITORY https://github.com/fmtlib/fmt
      GIT_TAG        e69e5f977d458f2650bb346dadf2ad30c5320281) # 10.2.1
    FetchContent_MakeAvailable(fmt)
    
    target_link_libraries(<your-target> fmt::fmt)
  • インストール済み:以下のように、インストール済みの{fmt}を、CMakeLists.txtファイルから検索して使用できます:

    find_package(fmt)
    target_link_libraries(<your-target> fmt::fmt)
  • ソースツリーの組み込み:{fmt}のソースツリーをプロジェクトに追加し、CMakeLists.txtファイルに組み込めます:

    add_subdirectory(fmt)
    target_link_libraries(<your-target> fmt::fmt)

別のターゲット

ヘッダーのみのターゲットまたはモジュールターゲットを使うには、上の手順のfmt::fmtを、それぞれfmt::fmt-header-onlyまたはfmt::fmt-moduleに置き換えます。

インストール

Debian/Ubuntu

Debian、Ubuntu、その他のDebianを基にしたLinuxディストリビューションに{fmt}をインストールするには、次のコマンドを使います:

apt install libfmt-dev

Homebrew

Homebrewを使って、macOSに{fmt}をインストールします:

brew install fmt

Conda

Condaのconda-forgeパッケージを使って、Linux、macOS、Windowsに{fmt}をインストールします:

conda install -c conda-forge fmt

vcpkg

vcpkgパッケージマネージャーを使って、{fmt}をダウンロードしてインストールします:

git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.sh
./vcpkg integrate install
./vcpkg install fmt

Conan

Conanパッケージマネージャーを使って、{fmt}をダウンロードしてインストールできます:

conan install -r conancenter --requires="fmt/[*]" --build=missing

ソースからビルドする

CMakeは、選択したコンパイラー環境で使えるネイティブなmakefileやプロジェクトファイルを生成します。通常は、fmtリポジトリ内で次のコマンドを実行するところから始めます:

mkdir build  # Create a directory to hold the build output.
cd build
cmake ..     # Generate native build scripts.

Unix系のシステムでは、現在のディレクトリにMakefileが生成されているはずです。makeを実行すると、ライブラリをビルドできます。

ライブラリのビルド後は、make testを実行してテストを行えます。

makeのtestターゲットを生成するかどうかは、CMakeのFMT_TESTオプションで制御できます。これは、fmtを自分のプロジェクトのサブディレクトリとして組み込む一方、fmtのテストを自分のtestターゲットに追加したくない場合に便利です。

共有ライブラリをビルドするには、CMake変数BUILD_SHARED_LIBSをTRUEに設定します:

cmake -DBUILD_SHARED_LIBS=TRUE ..

位置独立コードを持つ静的ライブラリをビルドするには、CMake変数CMAKE_POSITION_INDEPENDENT_CODEをTRUEに設定します。たとえば、Python拡張など別の共有ライブラリにリンクする場合に使います:

cmake -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE ..

ライブラリのビルド後、Unix系のシステムではsudo make installを実行してインストールできます。

文書をビルドする

文書をビルドするには、次のソフトウェアがシステムにインストールされている必要があります:

まず、前の節で説明したように、CMakeでmakefileやプロジェクトファイルを生成します。次に、docターゲット/プロジェクトをコンパイルします。たとえば、次のように実行します:

make doc

これにより、doc/htmlにHTML文書が生成されます。

ビルドシステム

build2

依存関係マネージャー兼ビルドシステムのbuild2で、{fmt}を使えます。

現在、このパッケージは次のパッケージリポジトリで提供されています:

使い方:

  • build2パッケージ名:fmt
  • ライブラリのターゲット名:lib{fmt}

build2プロジェクトをfmtに依存させるには、次のようにします:

  • まだ追加していなければ、構成またはrepositories.manifestに、どちらかのリポジトリを追加します:

    :
    role: prerequisite
    location: https://pkg.cppget.org/1/stable
  • このパッケージをmanifestファイルの依存関係に追加します(バージョン10の例):

    depends: fmt ~10.0.0
  • ターゲットをインポートし、fmtを使用する自分のターゲットの前提条件として、適切なbuildfileで指定します:

    import fmt = fmt%lib{fmt}
    lib{mylib} : cxx{**} ... $fmt

その後は通常どおり、bまたはbdep updateでプロジェクトをビルドします。

Meson

Meson WrapDBには、fmtパッケージが含まれています。

使い方:

  • 次のコマンドを実行して、WrapDBからfmtサブプロジェクトをインストールします:
    meson wrap install fmt

プロジェクトのルートから実行します。

  • プロジェクトのmeson.buildファイルに、新しいサブプロジェクトの項目を追加します:

    fmt = subproject('fmt')
    fmt_dep = fmt.get_variable('fmt_dep')
  • fmtとリンクするため、新しい依存関係オブジェクトを指定します:

    my_build_target = executable(
      'name', 'src/main.cc', dependencies: [fmt_dep])

オプション:

必要に応じて、{fmt}を静的ライブラリまたはヘッダーのみのライブラリとしてビルドできます。

静的ビルドには、次のサブプロジェクト定義を使います:

fmt = subproject('fmt', default_options: 'default_library=static')
fmt_dep = fmt.get_variable('fmt_dep')

ヘッダーのみのバージョンには、次の定義を使います:

fmt = subproject('fmt', default_options: ['header-only=true'])
fmt_dep = fmt.get_variable('fmt_header_only_dep')

Android NDK

{fmt}はAndroid.mkファイルを提供しており、Android NDKでライブラリをビルドするために使えます。

その他

その他のビルドシステムで{fmt}ライブラリを使うには、リリースアーカイブまたはgitリポジトリから、include/fmt/base.h、include/fmt/format.h、include/fmt/format-inl.h、src/format.ccと、必要に応じてその他のヘッダーをプロジェクトに追加します。includeをインクルードディレクトリに追加し、src/format.ccがコンパイルされ、自分のコードにリンクされるようにしてください。