プリコンパイル済みヘッダの設定

プリコンパイル済みヘッダの設定#

プリコンパイル済みヘッダの設定をしてビルド時間を短縮する。

CMake における設定#

CMake では以下のような形式で設定を記載する。

target_precompile_headers(<target> <PRIVATE|PUBLIC|INTERFACE> <headers>...)

例えば、CMake のターゲット example で ヘッダ <chrono><type_traits> をコンパイル済みヘッダにすると以下のようになる。

target_precompile_headers(example PRIVATE <chrono> <type_traits>)

Note

例のため普通の標準ライブラリのヘッダを指定しているが、 実際にはもっとビルドに影響する重いヘッダを指定する。

Ccache と併用するための設定#

ccache と併用する場合、 ccache が正しくコンパイル結果をキャッシュできるようにするため、 追加の設定が必要になる。

  • 環境変数として、以下を設定する。

    CCACHE_SLOPPINESS=pch_defines,time_macros,include_file_mtime,include_file_ctime
    
  • ビルド時の設定として、以下が必要となる。

    • プリコンパイル済みヘッダは -include オプションで指定する必要がある。

      Hint

      上記の CMake の記述をしていれば -include オプションは自動で設定される。

    • Clang の場合、-fno-pch-timestamp オプションを指定する。

      CMake の場合、以下のように記載する。 (example のところに CMake のターゲットの名称を記載する。)

      if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
          target_compile_options(example PRIVATE "$<$<COMPILE_LANGUAGE:CXX>:SHELL:-Xclang -fno-pch-timestamp>")
      endif()
      

参考#