0

私は、プリコンパイルされたヘッダー(stdafx.h)を使用するVisual Studio 2017 C++プロジェクトを持っています。次のようにVisual Studio 2017は不必要にstdafx.hを再コンパイルし続けますか?

マイ(簡体字)ファイル構造は次のとおりです。

header1.hpp 
header2.hpp 
stdafx.h -> includes header1.hpp 
code1.cpp -> includes stdafx.h 
code2.cpp -> includes stdafx.h and header2.hpp 

includes header1.hppを言うことによって、任意のあいまいさを避けるために、私は、ファイル内の行#include <header1.hpp>がある意味します。

  1. 私はstdafx.hを変更した後(予想通り)、3つのすべてのファイルstdafx.hcode1.cppcode2.cppが再コンパイルされています。

  2. code1.cppを変更した後は、code1.cppのみが(期待どおり)再コンパイルされます。

  3. 私はheader2.cppを変更した後、3つのすべてのファイルstdafx.hcode1.cppcode2.cppは(が期待できない!)再コンパイルされています。

私は他のみcode2.cppはなく、すべてをコンパイルするアイテム3を期待しているだろう。

考えられる原因は、ビルドマネージャが#includeディレクティブを調べたり追跡したりすることができないため、ヘッダーファイルが変更された場合にすべてを再コンパイルすることだけです。

私のプロジェクトはかなり大きいので、code1.cppのようなすべてのファイルを再コンパイルするとかなりの時間がかかります。私はheader2.hppstdafx.hから故意に入れていませんでした。なぜなら、header2.hppを頻繁に変更して、code2.cppだけを使用する必要があるからです。 (header2.hppは、テンプレートライブラリですcode2.cppが必要です)

この動作が予想され、Visual Studioで他のファイルを再コンパイルする必要がないことを認識させるにはどうすればよいですか?

+0

予想される動作のようです - プリコンパイルされたヘッダーは、ヘッダーが変更されるたびに再コンパイルされます。 – Thebluefish

+0

Visual Studioにプリコンパイル済みヘッダーを再コンパイルしないように指示する方法はありますか? – Bernard

+0

シンプル - プリコンパイル済みヘッダーは使用しないでください。 – Thebluefish

答えて

0

は、私は一年前に無効プリコンパイル済みヘッダを持っていた(ただし、プロジェクトにstdafx.hstdafx.cppを左)が判明し、私はそれらを再度使用することを望んでいたとき、私は/YcYuオプションをオンにするのを忘れました。

エラーは発生せず、Visual Studioは標準の.cppファイルのようにstdafx.cppをコンパイルしていました。

また、プリコンパイルされたヘッダーの仕組みが間違っていました。私はstdafx.hがをコンパイルしたものと考えていましたが(中間の表現で#include "stdafx.h"の.cppファイルにダンプされました)、実際にはコンパイルされるファイルはstdafx.cppです(コンパイル時に.pchファイルが生成されます)。 (this question

header2.cppを変更すると、プリコンパイル済みのヘッダーオプションが有効になった後、code2.cppのみが再コンパイルされます。

また、コンパイル時間も大幅に短縮されました。

関連する問題