
現在、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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# Cのコンパイルでコメントアウトをそのままオブジェクトに保持したい 7 2023/08/01 22:22
- アプリ Edgeを操作するアプリについて 4 2023/05/11 22:48
- C言語・C++・C# pythonで外部のファイルを読み込む際のエラー 2 2022/04/12 19:22
- Excel(エクセル) マクロの付いたExcelが開けません 3 2023/02/01 10:54
- C言語・C++・C# pythonのファイルの並びでの読み込みとリストについて 4 2022/04/13 03:52
- その他(プログラミング・Web制作) 置換ソフトで指定したファイルの1行目に入力できるものを探しています 7 2022/11/24 10:34
- レシピ・食事 お家でステーキを食べる時は、どんなソースが好きですか? 17 2022/09/13 09:26
- その他(ソフトウェア) 特定のpremiere proのファイルが開けなくなりました。 1 2022/11/16 12:31
- 労働相談 合意済み仕様の商品納入後における仕様変更要求への対応について 5 2023/04/19 09:41
- その他(ブラウザ) iPhone SEです。 ソースからコンパイルする方法ってどうすればいいのですか。教えてくださると嬉 3 2022/10/02 08:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
1 つ以上の複数回定義されてい...
-
VBAを何回も作り直して、容量が...
-
エクセルVBAではRound...
-
” OS ビルド ” の意味が分か...
-
外部シンボル "_main"は未解決です
-
C言語でヘッダファイルにグロー...
-
ILSpyで、デコンパイルできない。
-
クリティカルエラー Expressio...
-
PRO*C コンパイルエラー
-
<math.h>があるのにsqrtが・...
-
ExcelVBAで『ByRef 引数の型が...
-
「fatal error C1189」を回避す...
-
複数のサブディレクトリを一緒...
-
VB6とInputManソフトの関係
-
「猫でもわかるプログラミング...
-
マクロ コンパイルがグレーバック
-
Visual C++ ヘッダー情報の反映
-
【VC++6.0(MFC)】警告「LINK : ...
-
ビルドから除外されたソースの...
-
「DeclareステートメントにPtrS...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAを何回も作り直して、容量が...
-
” OS ビルド ” の意味が分か...
-
「fatal error C1189」を回避す...
-
C言語でヘッダファイルにグロー...
-
エクセルVBAではRound...
-
Makefile作成時の拡張子.oとは?
-
ILSpyで、デコンパイルできない。
-
1 つ以上の複数回定義されてい...
-
マクロ コンパイルがグレーバック
-
セミコロンについて
-
外部シンボル "_main"は未解決です
-
C++コンパイル時に『 C1083: in...
-
ビルドとリビルドの違いを教え...
-
コンパイルエラー:ユーザ定義...
-
「DeclareステートメントにPtrS...
-
戻り値について
-
pyc 編集 閲覧
-
PRO*C コンパイルエラー
-
【VC++6.0(MFC)】警告「LINK : ...
-
漢字のコメントをはずすとコン...
おすすめ情報