#1
by cpp_game » 4年前
C言語というよりも Visual Studio C++ の使い方に関してなのですが、
ゲームを開発していると、製品版と体験版など同一製品で異なるエディションというものがあります。
私はこれらの切り替えをマクロで行っているのですが(#ifdef TRIAL とか)
これをコンパイルのたびに TRIAL の定義を切り替えるのは面倒ですよね。
そこで構成マネージャを使って、デフォルトの Debug, Relase に体験版用の構成 TrailDebug, TrialRelease を追加し、TrialDebug, TrialRelase のときはプリプロセッサの定義に TRIAL を入れておくという使い方をしているのですが、これは「構成マネージャ」が想定している使用用途としては正しいモノなんでしょうか?
このやり方は製品版と体験版だけならまだ良いのですが、
例えばさらに Android 版と Steam 版などという分類が加わると
android_debug (android 製品版 デバッグ可能。"ANDROID _DEBUG" が定義済み)
android_release (android 製品版 最適化あり。"ANDROID NDEBUG" が定義済み)
android_trial_debug (android 体験版 デバッグ可能。"ANDROID TRIAL _DEBUG" が定義済み)
android_trial_release (android 体験版 最適化あり。"ANDROID TRIAL NDEBUG" が定義済み)
steam_debug (steam 製品版 デバッグ可能。"STEAM _DEBUG" が定義済み)
steam_release (steam 製品版 最適化あり。"STEAM NDEBUG" が定義済み)
steam_trial_debug (steam 体験版 デバッグ可能。"STEAM TRIAL _DEBUG" が定義済み)
steam_trial_release (steam 体験版 最適化あり。"STEAM TRIAL NDEBUG" が定義済み)
という風に、構成がドンドン増えていってしまいます。こんなもんなんでしょうか?
上記の話は1つのソリューションに1つのプロジェクトだけが含まれている場合なのですが、
仮にこれをゲームエンジン部分 (engine.vcxproj) とゲーム実装部分 (game.vcxproj) に分けたとしますと、
engine.vcxproj には
debug
release
の2構成だけが含まれていればよいですが、
game.vcxproj には
android_debug
android_release
android_trial_debug
android_trial_release
steam_debug
steam_release
steam_trial_debug
steam_trial_release
の8構成があることになります。
ここでは engine.vcxproj の構成と game.vcxproj の構成を正しく組み合わせないといけません
engine(debug) + Game(android_debug)
engine(debug) + Game(android_trial_debug)
engine(debug) + Game(steam_debug)
engine(debug) + Game(steam_trial_debug)
engine(release) + Game(android_release)
engine(release) + Game(android_trial_release)
engine(release) + Game(steam_release)
engine(release) + Game(steam_trial_release)
これで、「限定公開版」とか「スペシャルエディション」みたいなものが増えていくと、
わりと気軽に大変なことになると思うのですが、
普通は皆さんどんなふうに整理しているんでしょう?
C言語というよりも Visual Studio C++ の使い方に関してなのですが、
ゲームを開発していると、製品版と体験版など同一製品で異なるエディションというものがあります。
私はこれらの切り替えをマクロで行っているのですが(#ifdef TRIAL とか)
これをコンパイルのたびに TRIAL の定義を切り替えるのは面倒ですよね。
そこで構成マネージャを使って、デフォルトの Debug, Relase に体験版用の構成 TrailDebug, TrialRelease を追加し、TrialDebug, TrialRelase のときはプリプロセッサの定義に TRIAL を入れておくという使い方をしているのですが、これは「構成マネージャ」が想定している使用用途としては正しいモノなんでしょうか?
このやり方は製品版と体験版だけならまだ良いのですが、
例えばさらに Android 版と Steam 版などという分類が加わると
android_debug (android 製品版 デバッグ可能。"ANDROID _DEBUG" が定義済み)
android_release (android 製品版 最適化あり。"ANDROID NDEBUG" が定義済み)
android_trial_debug (android 体験版 デバッグ可能。"ANDROID TRIAL _DEBUG" が定義済み)
android_trial_release (android 体験版 最適化あり。"ANDROID TRIAL NDEBUG" が定義済み)
steam_debug (steam 製品版 デバッグ可能。"STEAM _DEBUG" が定義済み)
steam_release (steam 製品版 最適化あり。"STEAM NDEBUG" が定義済み)
steam_trial_debug (steam 体験版 デバッグ可能。"STEAM TRIAL _DEBUG" が定義済み)
steam_trial_release (steam 体験版 最適化あり。"STEAM TRIAL NDEBUG" が定義済み)
という風に、構成がドンドン増えていってしまいます。こんなもんなんでしょうか?
上記の話は1つのソリューションに1つのプロジェクトだけが含まれている場合なのですが、
仮にこれをゲームエンジン部分 (engine.vcxproj) とゲーム実装部分 (game.vcxproj) に分けたとしますと、
engine.vcxproj には
debug
release
の2構成だけが含まれていればよいですが、
game.vcxproj には
android_debug
android_release
android_trial_debug
android_trial_release
steam_debug
steam_release
steam_trial_debug
steam_trial_release
の8構成があることになります。
ここでは engine.vcxproj の構成と game.vcxproj の構成を正しく組み合わせないといけません
engine(debug) + Game(android_debug)
engine(debug) + Game(android_trial_debug)
engine(debug) + Game(steam_debug)
engine(debug) + Game(steam_trial_debug)
engine(release) + Game(android_release)
engine(release) + Game(android_trial_release)
engine(release) + Game(steam_release)
engine(release) + Game(steam_trial_release)
これで、「限定公開版」とか「スペシャルエディション」みたいなものが増えていくと、
わりと気軽に大変なことになると思うのですが、
普通は皆さんどんなふうに整理しているんでしょう?