7
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

Siv3Dでプリコンパイル済みヘッダーを使用してビルド時間を半分に短縮する

Siv3D Advent Calendar 2015の18日目の記事です。

Siv3D、便利ですがビルドが大変です。SSDだと数秒ですがUSBに入れているプロジェクトでは数十秒かかります。そこでプリコンパイル済みヘッダーを使用してビルド時間を短縮しよう、ということです。
Play Siv3D!のFAQには

コンパイル時間を短くする方法はある?
プリコンパイル済みヘッダを作成・使用することで、ビルド時間を半分以下に短縮できます。

とありますが、詳しい説明がなかったので手順を記しておきます。
この記事ではVisual Studio 2013 Community update 5およびSiv3D June v2を使用します。

プロジェクトを作成する

いつも通りにSiv3Dのプロジェクトを作成します。すでに作成している場合は次へ進んでください。

ヘッダー ファイルを作成する

  1. [表示(V)] -> [ソリューション エクスプローラ(P)] をクリックします。

  2. [ヘッダー ファイル]を右クリックし、[追加(D)] -> [新しい項目(W)...] をクリックします。

  3. [ヘッダーファイル (.h)] をクリックし、[名前(N)] に stdafx.h と入力して [追加(A)]をクリックします。

  4. stdafx.hが開いているはずなので、以下のように入力して保存します。

stdafx.h
#pragma once
#include <Siv3D.hpp>

C++ ファイルを作成する

  1. [表示(V)] -> [ソリューション エクスプローラ(P)] をクリックします。

  2. [ソース ファイル]を右クリックし、[追加(D)] -> [新しい項目(W)...] をクリックします。

  3. [C++ ファイル (.cpp)] をクリックし、[名前(N)] に stdafx.cpp と入力して [追加(A)]をクリックします。

  4. stdafx.cppが開いているはずですが、何も入力しません。

プロジェクトのプロパティを変更する

  1. [プロジェクト(P)] -> [(プロジェクト名) のプロパティ(P)...] をクリックします。

  2. 左のツリーの [構成プロパティ] -> [C/C++] -> [プリコンパイル済みヘッダー] をクリックします。

  3. [構成(C)] が [すべての構成]になっていることを確認し、[プリコンパイル済みヘッダー] を [使用 (/Yu)] に変更します。

  4. 左のツリーの [詳細設定]をクリックします。

  5. [必ず使用されるインクルード ファイル] に stdafx.h と入力し、 [OK]をクリックします。

stdafx.cppのプロパティを変更する

  1. [表示(V)] -> [ソリューション エクスプローラ(P)] をクリックします。

  2. stdafx.cpp を右クリックし、プロパティ(R)をクリックします。

  3. 左のツリーの [構成プロパティ] -> [C/C++] -> [プリコンパイル済みヘッダー] をクリックします。

  4. [構成(C)] が [すべての構成]になっていることを確認し、[プリコンパイル済みヘッダー] を [作成 (/Yc)] に変更して、 [OK]をクリックします。

ビルドする

  1. いつも通りビルドしてみます。1回目なのでビルド時間は通常と変わらないはずです。
  2. Main.cppの一部を変えてもう一度ビルドしてみましょう。ビルドログを確認するとstdafx.cppがビルドされなくなくなっており短い時間で起動したはずです。

補足・蛇足

  • クリーンしたあと1回目のビルド時間は通常と変わりません。
  • ソースファイル(Main.cpp等)には#include <Siv3D.hpp>を書かなくても動きます。
  • 手順が多いのでSiv3Dのテンプレートに入れて欲しいです(要望)

明日は@Mitsugoro32さんです。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
7
Help us understand the problem. What are the problem?