現在、Visual Studioを使用してある巨大なプロジェクトを開発しています。言語は
C++です。
このプロジェクトには、ソースファイル(*.cpp)が全部で1000以上もありま
す。百ではありません、千です。
そのため、プロジェクトをビルドするのに30分以上もかかり、開発効率が非常に悪
くなっています。
コンパイル・リンクとも相当の時間がかかっています。実感としては、cpp1ファイ
ルにつきコンパイル1秒かかっています。
(なぜそんなに大量のcppが必要なのかというのはここでは置いといてください)
そこで、次のような方法でビルド時間を短縮する方法を考案しました。
(1)ある一定数のソースファイルのプロパティで「ビルドから除外」とする。
(2) (1)でビルドから除外したソースファイルを全てインクルードしたソース
ファイルを作成し、プロジェクトに追加する。
[1つにまとめたソースファイルのイメージ]
#include "src001.cpp"
#include "src002.cpp"
#include "src003.cpp"
・・・
#include "src999.cpp"
ソースファイルを1つにまとめてしまう事による弊害は全て解決したものとします。
以上により、プロジェクト内のソースファイル数を100以下にまで減らし、無事ビ
ルド時間が大幅に短縮されました。
と、ここまでは良かったのですが、一つ問題があります。
それは、「ビルドから除外」したソースファイルを単独でコンパイル出来なくなって
しまうのです。(ここでは、そういうことをしたいという要望があると思ってくださ
い)
ソリューションエクスプローラでソースファイルを右クリックし、出てくるメニュー
リストの「コンパイル」が無効表示され選択できません。
もちろん、コンパイルコマンド(cl.exe)をコマンドラインから直接叩いてやればい
くらでも出来ますが、出来ればIDEから簡単な操作で行いたいのです。
また、チームで開発しているため、コンパイルする時だけソースファイルの設定を変
更するというようなことはしたくないのです。
この問題に対して、何か良い手段はないでしょうか?
プロジェクトを複数モジュールに分離して・・・
とか、
プリコンパイル済みヘッダを利用して・・・
とか、
リビルド時間を短縮するためソース間の依存関係を減らして・・・
というような、質問の内容を超える回答はご遠慮ください。
そのようなことは、十分ではないかも知れませんが検討済みです。
No.9
- 回答日時:
>ただ、たったそれだけのために余分な紛らわしいプロジェクトを1つ追加してしまうことは、大人数で開発を行っている現場ではなかなか許されないのです。
勘違いしてしまう人がいないとも限りませんから。それをいってしまうなら、今の様な状態やその対処方法をふつうだと勘違いする人がいるかもしれないことの危惧もされた方がよいかと思いますが(正直いえば、紛らわしい対処方法をすでにやっておいて何をいまさらって感じ)
No.8
- 回答日時:
> プロジェクトが2つ出来るということは、本目的のためだけにプロジェクトを
> 切り替えなければならないという面倒が生じます。
ソリューションの中にもうひとつ個別コンパイル用プロジェクト"single-compile"を起こし、
「XXX.cppだけコンパイルしたいときはsingle-compileからXXX.cppを選んで"コンパイル"してね」
だけのことやと思うけど、これがそんなに面倒ですか?
面倒ではありません。ただ、たったそれだけのために余分な紛らわしいプロジェクトを1つ追加してしまうことは、大人数で開発を行っている現場ではなかなか許されないのです。勘違いしてしまう人がいないとも限りませんから。
No.5
- 回答日時:
そういう事のできるVisualStudioのプラグインでも作るしかないんじゃないでしょうか。
単独でコンパイルしたいというのは
>[1つにまとめたソースファイルのイメージ]
>#include "src001.cpp"
>#include "src002.cpp"
>#include "src003.cpp"
>・・・
>#include "src999.cpp"
上記のsrc001.cpp等なんでしょうけど、今の状況で単独コンパイルできるようにする方が問題だと私は思いますが(コンパイルはできてもリンクでエラーが発生するとか出てきそうだから)。
ご回答ありがとうございます。
プロジェクトの設定としてはsrc001.cpp等は全てビルドから除外していますので、リンクの対象とならないような動作を期待しています。
No.4
- 回答日時:
ソースコードの構成その他に根本的な問題があると思いますが、おそらくそれはわかっていると思うので...
> もちろん、コンパイルコマンド(cl.exe)をコマンドラインから直接叩いてやればい
> くらでも出来ますが、出来ればIDEから簡単な操作で行いたいのです。
コマンドラインで操作するのが簡単ではない理由は何ですか?
もし、大量のオプションを指定しなければならないことが理由であれば、バッチファイルでも作っておけば解決します。
(バッチファイルのアイコンに、ソースファイルをドラッグ&ドロップするだけになります)
ご回答ありがとうございます。
確かにその通りですがね。出来ればVSの中だけで出来る方法を見つけたかったのです。バッチで構わないというならここで聞くまでもありません。
No.3
- 回答日時:
>そのため、プロジェクトをビルドするのに30分以上もかかり、開発効率が非常に悪
くなっています。
「ビルド」と書かれていますが、これは「リビルド」の事なんでしょうか。
>リビルド時間を短縮するためソース間の依存関係を減らして・・・
>
>というような、質問の内容を超える回答はご遠慮ください。
>そのようなことは、十分ではないかも知れませんが検討済みです。
と書かれている事からそんな気がするのですけど。
というか、ソース間の依存関係って*.cpp同士に依存関係があるという事なんでしょうか。
ご回答ありがとうございます。
ビルドでもリビルドでもかなりの時間がかかるのです。作りが悪いことは分かっているのですが、今更どうしようもないのですよ。
No.1
- 回答日時:
ソースファイルを纏めた結果、その「まとまった」ソースに対する「1つの」オブジェクトが生成されるようになってしまっている筈です。
この場合、その一部を書き換えた上でビルドするには、当然その「1つの」オブジェクトを生成するために、「一纏まりの」ソースをコンパイルする必要があります(リンカの動作はご存知でしょうか)。
その為、(ビルドから除外した)特定のソースファイルを単独でコンパイルする、という柔軟性を必然的に失ってしまっていることでしょう。
私ならそのような方法の代わりに、(mingwの)GNU Makeでビルドしたいです。依存関係を自動的に洗ってくれる、ファイルの更新日時を見て必要最小限のコンパイルで済ましてくれる、可能な限り多重のプロセスを用いて並列に実行させることが出来る(-jオプション)といった優れた結果が得られるので。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・【お題】絵本のタイトル
- ・【大喜利】世界最古のコンビニについて知ってる事を教えてください【投稿~10/10(木)】
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
” OS ビルド ” の意味が分か...
-
コンパイルエラー:ユーザ定義...
-
1 つ以上の複数回定義されてい...
-
visual studio .NET→ Visual C+...
-
ILSpyで、デコンパイルできない。
-
[c++] <pthread.h>がinclude で...
-
VB6で開発中…標準モジュール間...
-
C言語のコンパイル方法
-
<math.h>があるのにsqrtが・...
-
C++でのルートの計算
-
VB5の逆コンパイルについて
-
複数のサブディレクトリを一緒...
-
ExcelVBAで『ByRef 引数の型が...
-
PRO*C コンパイルエラー
-
sys/types.hの必要性について
-
python エラー
-
アプリケーションのDLLファイル...
-
コンパイルできません。
-
C言語での開発でエラーが出て困...
-
適切な変換関数が存在しない???
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAを何回も作り直して、容量が...
-
” OS ビルド ” の意味が分か...
-
1 つ以上の複数回定義されてい...
-
「fatal error C1189」を回避す...
-
エクセルVBAではRound...
-
Makefile作成時の拡張子.oとは?
-
C言語でヘッダファイルにグロー...
-
ILSpyで、デコンパイルできない。
-
セミコロンについて
-
<math.h>があるのにsqrtが・...
-
クリティカルエラー Expressio...
-
外部シンボル "_main"は未解決です
-
マクロ コンパイルがグレーバック
-
[c++] <pthread.h>がinclude で...
-
C++コンパイル時に『 C1083: in...
-
【VC++6.0(MFC)】警告「LINK : ...
-
ビルドとリビルドの違いを教え...
-
コンパイルエラー:ユーザ定義...
-
VB6で開発中…標準モジュール間...
-
コンパイル??
おすすめ情報