使い始める
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}を使えます。
現在、このパッケージは次のパッケージリポジトリで提供されています:
- https://cppget.org/fmt/:リリースされ、公開されたバージョン。
- https://github.com/build2-packaging/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がコンパイルされ、自分のコードにリンクされるようにしてください。