CMake クックブック
このリポジトリは、Packt が発行し、Radovan Bast と Roberto Di Remigio が執筆した CMake Cookbook に含まれるレシピのソースを収集します。
目次
第 1 章: 単純な実行可能ファイルからライブラリへ
- 1. 単一のソース ファイルを実行可能ファイルにコンパイルする
- 2. 発電機の切り替え
- 3. 静的ライブラリと共有ライブラリの構築とリンク
- 4. 条件付きコンパイルの制御
- 5. ユーザーへのオプションの提示
- 6. コンパイラの指定
- 7. ビルドタイプの切り替え
- 8. コンパイラフラグの制御
- 9. 言語の標準の設定
- 10. 制御フロー構造の使用
第 2 章: 環境の検出
- 1. オペレーティング システムの検出
- 2. プラットフォームに依存するソースコードの扱い
- 3. コンパイラに依存するソースコードの扱い
- 4. ホストプロセッサアーキテクチャの発見
- 5. ホストプロセッサ命令セットの検出
- 6.Eigen ライブラリのベクトル化を有効にする
第 3 章: 外部ライブラリとプログラムの検出
- 1. Python インタープリターの検出
- 2. Python ライブラリの検出
- 3. Python モジュールとパッケージの検出
- 4. BLAS および LAPACK 数学ライブラリの検出
- 5. OpenMP並列環境の検出
- 6. MPI並列環境の検出
- 7. 固有ライブラリの検出
- 8. Boost ライブラリの検出
- 9. 外部ライブラリの検出: I.
pkg-config
の使用 - 10. 外部ライブラリの検出: II。検索モジュールの作成
第 4 章: テストの作成と実行
- 1. 簡単な単体テストの作成
- 2. Catch2 ライブラリを使用した単体テストの定義
- 3. 単体テストの定義と Google Test へのリンク
- 4. 単体テストの定義とブースト テストへのリンク
- 5. 動的解析を使用してメモリ欠陥を検出する
- 6. 予想される失敗のテスト
- 7. 長いテストでのタイムアウトの使用
- 8. テストの並列実行
- 9. テストのサブセットの実行
- 10. テストフィクスチャの使用
第 5 章: 構成時およびビルド時の操作
- 1. プラットフォームに依存しないファイル操作の使用
- 2. 構成時にカスタム コマンドを実行する
- 3. ビルド時にカスタム コマンドを実行する: I.
add_custom_command
を使用する - 4. ビルド時にカスタム コマンドを実行します。 II.
add_custom_target
の使用 - 5. ビルド時に特定のターゲットに対してカスタム コマンドを実行する
- 6. コンパイルとリンクの調査
- 7. コンパイラフラグの調査
- 8. プロービングの実行
- 9. ジェネレーター式を使用した構成とコンパイルの微調整
第 6 章: ソースコードの生成
- 1. 設定時にソースを生成する
- 2. Python を使用した構成時のソース コードの生成
- 3. Python を使用してビルド時にソース コードを生成する
- 4. 再現性を高めるためにプロジェクトのバージョン情報を記録する
- 5. ファイルからプロジェクトのバージョンを記録する
- 6. 構成時に Git ハッシュを記録する
- 7. ビルド時に Git ハッシュを記録する
第 7 章: プロジェクトの構築
- 1. 関数とマクロを使用したコードの再利用
- 2. CMake ソースをモジュールに分割する
- 3. コンパイラ フラグをテストおよび設定する関数を作成する
- 4. 名前付き引数を使用した関数またはマクロの定義
- 5. 関数とマクロの再定義
- 6. 関数、マクロ、変数の非推奨化
- 7.
add_subdirectory
によるスコープの制限 - 8.
target_sources
を使用したグローバル変数の回避 - 9. Fortran プロジェクトの組織化
第 8 章: スーパービルド パターン
- 1. スーパービルド パターンの使用
- 2. スーパービルドによる依存関係の管理: I. Boost ライブラリ
- 3. スーパービルドによる依存関係の管理: II. FFTWライブラリ
- 4. スーパービルドによる依存関係の管理: III. Google テスト フレームワーク
- 5. プロジェクトをスーパービルドとして管理する
第 9 章: 混合言語プロジェクト
- 1. C/C++ ライブラリを使用する Fortran プロジェクトの構築
- 2. Fortran ライブラリを使用する C/C++ プロジェクトの構築
- 3. Cython を使用した C++ および Python プロジェクトの構築
- 4. Boost.Python を使用した C++ および Python プロジェクトのビルド
- 5. pybind11 を使用した C++ および Python プロジェクトのビルド
- 6. Python CFFI を使用した C、C++、Fortran、Python の混合
第 10 章: インストーラーの作成
- 1. プロジェクトのインストール
- 2. エクスポートヘッダーの生成
- 3. ターゲットのエクスポート
- 4. スーパービルドのインストール
第 11 章: プロジェクトのパッケージ化
- 1. ソースおよびバイナリ パッケージの生成
- 2. CMake/pybind11 でビルドされた C++/Python プロジェクトを PyPI 経由で配布する
- 3. CMake/CFFI でビルドされた C/Fortran/Python プロジェクトを PyPI 経由で配布する
- 4. 簡単なプロジェクトを Conda パッケージとして配布する
- 5. 依存関係のあるプロジェクトを Conda パッケージとして配布する
第 12 章: ドキュメントの構築
- 1. Doxygen を使用してドキュメントを構築する
- 2. Sphinx を使用したドキュメントの構築
- 3. Doxygen と Sphinx の組み合わせ
第 13 章: 代替ジェネレーターとクロスコンパイル
- 1. Hello World サンプルのクロスコンパイル
- 2. OpenMP 並列化を使用した Windows バイナリのクロスコンパイル
第 14 章: ダッシュボードのテスト
- 1. CDash ダッシュボードへのテストの展開
- 2. CDash ダッシュボードへのテスト カバレッジのレポート
- 3. AddressSanitizer の使用とメモリ欠陥の CDash への報告
- 4. ThreadSanitizer の使用とデータ競合の CDash への報告
第 15 章: プロジェクトを CMake に移植する