12

約 60 個の C++ ソース ファイルを含む Visual Studio プロジェクトがあります。ビルドを実行でき、エラーなしで完了します。しかし、すぐにもう一度 F7 キーを押すと、常に約 50 のソース ファイルが再コンパイルされます。奇妙なことに、すべてのファイルを再コンパイルするわけではありません。

「最小限の再構築を有効にする」(/Gm) が設定されています。なぜこれを行っているのでしょうか?将来の変更日を持つファイルはありません。

4

18 に答える 18

8

ファイルの日付に将来の日付はありますか? これは、タイム ゾーンを変更したか、システム クロックの時刻を変更した場合に発生する可能性があります。将来の日付は IDE を混乱させ、F7 または F5 が押されるたびに再構築を強制します。

于 2009-06-20T20:50:47.097 に答える
7

私は同じ問題を解決しました。

私の場合、コンパイラは警告を表示しました。/Gm が指定されている場合は /Zi オプションが必要です。

/Gm は、.pdb ファイルのデバッグ情報を必要とする "最小限の再構築" を有効にします。したがって、.pdb を使用したくない場合は、最小限の再構築も無効にします。これで私の場合は問題が解決しました。

于 2012-01-18T16:46:12.787 に答える
5

ほとんどの場合、依存関係の問題です。

次の可能性を考慮してください。

  • ソリューション内の一部のファイルに対してカスタム ビルド ツールが定義されている場合は、出力プロパティに正しいファイル名が含まれていることを確認してください。ビルド ツールの出力が出力ファイル名で指定されたものと一致しない場合、ビルダーはそのファイルを再構築します。

  • カスタム ビルド イベントがある場合は、それらのビルド イベントからの出力が、ビルドされるファイルの依存関係に影響を与えないかどうかを確認します。

  • ビルド後に、出力ファイルの一部をビルド フォルダーにコピーまたは移動しようとすると、問題が発生しました。ビルド プロセスの出力ファイルのタイムスタンプに影響するビルド後の操作によって、毎回再ビルドが決定されます。

于 2009-06-20T20:51:48.420 に答える
4

[プロジェクト プロパティ] -> [C/C++] -> [出力ファイル] -> [プログラム データベース ファイル名] オプションを空にすることはできません。ドロップダウン ボックスから選択して、このオプションを設定します。オプションは次のように設定されます: $(IntDir)\vc90.pdb。そして行 ProgramDataBaseFileName="" は vcproj ファイルから削除されます。

その後、プロジェクトまたはソリューションをビルドするときに、変更された *.cpp ファイルのみが再コンパイルされます。

于 2012-03-02T14:34:52.077 に答える
4

私の場合、そのような効果 (VS2005 経由の C++) はリリース構成のみであり、Studio はビルド出力で、/Zi オプションが設定されていない場合はコンパイラ オプション /Gm が無視されることを通知します。/Zi を設定した後

構成プロパティ -> C/C++ -> 一般 -> デバッグ情報形式: プログラム データベース (/Zi) 、

それはOKでした。しかし、リリース構成にデバッグに関する何かが必要な場合、何か問題がありますか? 私にはまだはっきりしていません!

于 2011-02-26T10:11:56.773 に答える
3

数日間グーグルで調べた後、問題の解決策が見つかりました。

プロジェクトを新しい PC に移動したときに、この問題が発生しました。ファイルの作成日を何度か確認しました。これらの日付は最新のものでしたが、ファイルを変更した場合でも、変更日は(ちょっと奇妙に)ひどいものでした。

ファイルを簡単に更新すると、問題が解決しました。

于 2011-05-09T13:21:34.810 に答える
3

私も同じ問題を抱えており、ブラウズ情報をオフにしたことが原因のようです。プロパティ -> C/C++ -> ブラウズ情報 -> ブラウズ情報を有効にする -> なし。私が見つけた唯一の修正は、それを再びオンにすることです。これは xbox 360 プロジェクト用です。fwiw、私の他のプロジェクトには問題はありません。

于 2009-07-16T00:27:51.807 に答える
3

この問題は多くの原因で発生する可能性があるようですが、私にとってそれを修正したのは次のとおりです。

  1. Visual Studio を閉じる
  2. すべて binのフォルダーを手動で削除するobj(Clean ではうまくいかないようです)
  3. ソリューションを開いてCleanを実行します(これが必要かどうかはわかりませんが、念のため実行しました...)
  4. 通常通りの建物

注: これは、Visual Studio 2010 の C# プログラム用です。

于 2010-08-09T13:31:15.077 に答える
2

理由は、ソース ファイルの 1 つの「最終更新日」が将来のある日付に設定されている場合です。それは再構築されますが、ソース ファイルは実行可能ファイルよりもまだ後です。

日付に関するこの問題は、ソース ファイルがリモート マシン (ネットワーク共有) のディレクトリにある場合に発生する可能性があり、マシンの時刻がサーバーを実行しているマシンの日付と同期されていない場合にも発生する可能性があります。ソース バージョン管理システムの。

于 2009-06-20T20:51:56.987 に答える
1

プロジェクトに、ディスク上に存在しない.hヘッダーファイルが含まれていることを確認してください。実際にはどこにもインクルードしていないヘッダーファイルを削除すると、常に発生しますが、VSのソリューションナビゲーターから削除するのを忘れています。注:ヘッダーが欠落していても、ビルド中にエラーは発生しません(#includeされていない場合)。

于 2011-08-31T03:55:22.140 に答える
1

プロジェクトのプログラム データベース ファイル名の設定を確認してください。何らかの理由で、これがディレクトリの名前 ( など"$(IntDir)\") に設定されている場合、PDB ファイルを生成していなくても (つまり、デバッグ情報形式が「無効」に設定されている場合でも、VS が毎回プロジェクトを再構築することがあります)。 」)。

これは VS2008 のバグです。VS2010 ではまだ再現していませんが、テストが完全ではないため、この動作が VS2010 に存在しないとは言えません。

于 2011-10-21T15:55:35.267 に答える
0

「最小限の再構築」(構成プロパティ> C / C ++>コード生成)を無効にすると、修正されました。コンパイラは手がかりさえ残しました:

1> cl:コマンドライン警告D9007:'/Gm'には'/Ziまたは/ZI'が必要です。オプションは無視されます

私が指摘しなければならないが、コンパイラはそれが言ったようにオプションを無視しなかった。

于 2011-12-06T01:27:32.637 に答える
0

私に同様の症状を引き起こしたのは、次のとおりです。ソリューションにいくつかのプロジェクトがあります。1つを超えるプロジェクトによって参照された(したがってコンパイルされた).cppファイルがありました。残念ながら、Visual Studioは非常に単純な名前で.objファイルを作成します。これは、「。cpp」を「.obj」に置き換えるだけです。別の名前でラッパー.cpp-sを作成すると、問題が解決しました。

于 2010-08-16T10:18:37.123 に答える
0

同じ問題がありました。解決方法: - 出力フォルダー (obj、exe、すべてのファイル) を削除 - cygwin を実行 -cd プロジェクト フォルダー - ファイルをリセットする "touch *" を実行 日付/時刻を変更 - ビルドして楽しむ 問題を修正

于 2014-09-02T06:59:06.813 に答える
0

似たようなことがありました。ビルド前およびビルド後のイベントがありましたが、問題の原因ではありませんでした。「新しい場合はコピー」ではなく「常にコピー」とマークされたコンテンツ ファイルを含む参照チェーンの下に、これらのプロジェクトが常に「古い」と見なされていたことを意味する多くのプロジェクトがあることがわかりました。これらすべてを「新しい場合はコピー」に変更することで、単体テスト プロジェクトを変更しても、他のすべてのプロジェクトの再コンパイルが強制されることはなくなりました。

于 2011-01-05T15:02:05.020 に答える
0

私たちは定期的にここにそれを持っています:

  • すべての中間ファイルと出力ファイルを手動で削除します。vstudio の clean オプションでは不十分な場合があります。新たなスタートから、完全なビルドを行います。ビルドが完了した後でも vstudio が特定のファイルを再コンパイルしたい場合は、次の箇条書きに関連している可能性があります。
  • vcxproj で、ディスク上にないヘッダー ファイルが参照されている場合、プロジェクトも再コンパイルされます。これは、MSDN ブログに記載されている隠し機能で確認するか、プロジェクト エクスプローダー内のすべてのヘッダー ファイルに触れて (つまり、クリックして開く)、ディスク上に存在しないかどうかを確認します。
于 2013-11-05T19:12:27.217 に答える