11/03/15 17:11:32.96 KXScCzgE
とある人の受け売りだけど、VCにてビルドを超高速化する方法
自作のヘッダファイルにはインクルードガードを施す
↓
cppファイルを1つを除いて全部「ビルドから除外」する
↓
そして、その1つのcppファイルにそれら「ビルドから除外」したcppファイルを全部インクルードする
↓
ビルドする
↓
サラマンダーよりはやーい
プリコンパイル済みヘッダはシラネ
952:名前は開発中のものです。
11/03/15 17:14:05.00 fAuDpb2f
>>951
最後なんなんだよ。
俺とやる気か?あ?
953:名前は開発中のものです。
11/03/15 18:01:11.55 nteT3Zz7
>>950
めっちゃ早くなってるよ
アホだから設定苦戦したけど。
954:名前は開発中のものです。
11/03/15 19:05:01.55 QQAoE1bu
>>951
それって1ファイル書き換えただけで全部の.h/.cppをコンパイルし直すことにならないか?
955:名前は開発中のものです。
11/03/15 19:44:40.83 KXScCzgE
>>954
よっぽどの量でない限り、一つのファイルのコンパイル速度はコード量に左右されないよ
ビルドで時間使ってるのはプリプロセスやobjのリンクで、それをすっ飛ばせるとかなり早くなる
cppが多いプロジェクトを書き換えると感動すると思うよホント
正直今まで人に教えるのを勿体無いと思ってたレベル
956:名前は開発中のものです。
11/03/15 20:12:52.73 Q7+nM0HN
つうか、普通にそういうのオフに出来るオプションあるんじゃないの?
いや、詳しくは知らんけど。
957:名前は開発中のものです。
11/03/15 20:32:14.80 xbXr2Nkf
>>951
includeの順番間違えて
ビルド出来るようにするまでちょっと戸惑ったけど
むっちゃくちゃ速くなった、ありがとう
958:名前は開発中のものです。
11/03/15 20:38:02.64 hTtiuP+j
#includeでcppか……違和感はあるな
959:名前は開発中のものです。
11/03/15 21:01:01.48 44jcDk3e
LL系言語のloadfileみたいだなw
960:名前は開発中のものです。
11/03/16 15:22:41.05 ywftU18L
理に適ってるかどうかは置いといて、非合理的ではある
961:名前は開発中のものです。
11/03/16 16:22:15.68 zS54Nj1q
なぜ非合理的なのでしょうか?
962:名前は開発中のものです。
11/03/16 16:25:58.79 zS54Nj1q
つか、理にかなってないかわからないけど
非合理的って矛盾してね?
963:名前は開発中のものです。
11/03/16 16:26:24.95 do/XMJJp
合理的かどうかは知らんが、スピードを優先するために何かを犠牲にするって話だよね
何かってのは例えば>>957がたどったような手間とか
964:名前は開発中のものです。
11/03/16 18:52:54.43 UW09KiLI
>>963
オレがその>>957だが、ビルド出来るようにする手間より
ビルドにかかる時間の短縮のほうがでかかったよ
すげ~得した
>>955の言うとおりcppファイルが沢山あるプロジェクトほど効果はデカイ
>>960のレスこそ非合理的って話だな
965:名前は開発中のものです。
11/03/16 18:53:19.02 gTLtkOfi
まぁぶっ飛んだ裏技的やり方だからね
C++の仕様を理解できてコードの依存関係を頭の中でちゃんとイメージ出来る人だけ
楽する手段としてつかって欲しい感じ
966:名前は開発中のものです。
11/03/16 19:07:37.43 BjnjOb1q
このやり方を支援するプラグインがあればいいのにな
967:名前は開発中のものです。
11/03/16 19:17:41.84 i6gMh4cT
てか、俺からしたらそんなにビルドに時間がかかるほどのゲームを作ってる人がいるのに驚きだ。
しかもDXライブラリを使って? いったいどんな規模のゲームなんだ。
968:名前は開発中のものです。
11/03/16 19:17:48.09 BC+pXFRw
デフォでオフだけど並列でビルドするオプションがある
すごく早くなる
969: [―{}@{}@{}-] 名前は開発中のものです。
11/03/16 19:31:14.46 wm2Br6SF
// main.cpp
#include <stdio.h>
#include "sub_1.cpp"
#include "sub_2.cpp"
extern int get_sub_1_val(void);
extern int get_sub_2_val(void);
int main(void)
{
printf("sub_1_val: %d\n", get_sub_1_val());
printf("sub_2_val: %d\n", get_sub_2_val());
return 0;
}
// sub_1.cpp
static int val = 10;
int get_sub_1_val(void){ return val; }
// sub_2.cpp
static int val = 20;
int get_sub_2_val(void){ return val; }
sub_2.cpp(1) : error C2370: 'val' : 再定義 ; 異なるストレージ クラスです。
sub_1.cpp(1) : 'val' の宣言を確認してください。
970:名前は開発中のものです。
11/03/16 19:47:41.09 zS54Nj1q
なるほどね
Cだと駄目だね
無名空間とかもそうなるのかな?
971:名前は開発中のものです。
11/03/16 19:50:17.06 gTLtkOfi
>>967
そんな大規模じゃなくてもcppファイルが多くて…… STGなんだけど、
自作計算関数、自作システム関数、保存データ管理関数、敵クラス、弾クラス、その他オブジェクトクラス、
ゲームシーンクラス、メニューシーンクラス、リソース定義……とか
全体の行数はたった6000行ちょい(空改行除く)
>>969
extern宣言してないグローバル変数の衝突は仕方ない……
てか考えると思ったよりも問題の出るケース多そうね……
972:名前は開発中のものです。
11/03/16 20:02:03.60 1Ae82QgD
>>968
教えてくれてサンクス
一瞬で終わって驚いた
973:名前は開発中のものです。
11/03/16 21:19:17.62 tAHP0ur9
全体の行数ってどうやったら数えられるんだっけ?
974:名前は開発中のものです。
11/03/16 21:19:47.26 tAHP0ur9
書き忘れた、もちろんVCの話で…
975:名前は開発中のものです。
11/03/16 23:33:53.97 do/XMJJp
行数カウントツールが、フリーソフトページにあるよね
並列ビルドはぐぐったけど見つからなかった
複数プロジェクトを同時ビルドってのは初期値が2で最大値が32みたいだけど、これは違うよねきっと
976:名前は開発中のものです。
11/03/17 01:14:09.79 jlNSzrqd
VCに「複数プロセッサによるコンパイル」という項目がある
977:名前は開発中のものです。
11/03/17 04:33:38.84 FsTg2Syb
プロジェクトのプロパティ>構成プロパティ>C/C++>全般>複数プロセッサによるコンパイル
だな
VC++2010にはあるけど、VC++2008には無いみたいだな
978:名前は開発中のものです。
11/03/17 21:28:02.94 USLN5jlJ
2008なら/MPオプションを直接与えればいい