2

make ファイル内に .pch を作成したいと考えています。cl /nologo /c /YcPrecompiled.hpp /FpPrecompiled.pch Precompiled.cpp

私を混乱させたのは、このコマンドが Precompiled.obj という名前のオブジェクトも作成する理由です

このオブジェクトを finale exe にリンクする必要がありますか?

Web で検索したところ、msdn でチュートリアルを見つけました: http://msdn.microsoft.com/en-us/library/d9b6wk21(v=VS.71).aspx 1 行わかりません:

$(CPP) $(CLFLAGS) /Yc$(BOUNDRY)    applib.cpp myapp.cpp

pch を作成するとき、なぜ applib.cpp と myapp.cpp が必要なのですか。また、.pch ファイルを除いて、applib.obj、myapp.obj の 2 つのオブジェクトも作成されます。なぜですか?

どんな指摘も歓迎します。どうもありがとう!

4

2 に答える 2

0

これをmakefileで実行しようとしているので、そのチュートリアルで提案されているパターンに従ってみます(これは、MSDNのVS2010までずっと同じです)。これは、Microsoftがmakefile内でPCH生成を処理することを望んでいる方法です。

あなたがそれをしている方法はあなたに正しい結果を与えていません-あなたはPCHのためのOBJファイルを見るべきではありません。makefileをMicrosoftモデルと一致させれば、大丈夫かもしれません。

PCHコンパイルのためにmakefileのコマンドラインでファイルをコーディングする必要性に関して-このチュートリアルの他の場所にもう少し理論的根拠があります

于 2011-06-10T19:43:47.283 に答える
0

MSDN は、少なくとも他の2 つの場所でそれについて言及しています。

STDAFX.CPP、STDAFX.H : これらのファイルは、プリコンパイル済みヘッダー ファイル PROJNAME.PCH およびプリコンパイル済みタイプ ファイル STDAFX.OBJ を構築するために使用されます。

この説明では、プリコンパイル済みヘッダーとプリコンパイル済みタイプを明確に区別していません。MFC プロジェクトの典型的な stdafx.obj でdumpbinを実行すると、一連の静的ATL 型が含まれていることがわかります。その定義は、インクルード ツリーの奥深くに埋め込まれています。

     ...
     COMDAT; sym= "struct ATL::IAtlAutoThreadModule * ATL::_pAtlAutoThreadModule" (?_pAtlAutoThreadModule@ATL@@3PEAUIAtlAutoThreadModule@1@EA)
     COMDAT; sym= "public: static int const ATL::AtlLimits<int>::_Min" (?_Min@?$AtlLimits@H@ATL@@2HB)
     COMDAT; sym= "public: static int const ATL::AtlLimits<int>::_Max" (?_Max@?$AtlLimits@H@ATL@@2HB)
     COMDAT; sym= "public: static unsigned int const ATL::AtlLimits<unsigned int>::_Min" (?_Min@?$AtlLimits@I@ATL@@2IB)
     COMDAT; sym= "private: static int (__cdecl* ATL::CNoUIAssertHook::s_pfnPrevHook)(int,char *,int *)" (?s_pfnPrevHook@CNoUIAssertHook@ATL@@0P6AHHPEADPEAH@ZEA)
     COMDAT; sym= "public: static bool ATL::CAtlBaseModule::m_bInitFailed" (?m_bInitFailed@CAtlBaseModule@ATL@@2_NA)
     COMDAT; sym= "public: static unsigned short const ATL::CVarTypeInfo<char>::VT" (?VT@?$CVarTypeInfo@D@ATL@@2GB)
     COMDAT; sym= "public: static char tagVARIANT::* ATL::CVarTypeInfo<char>::pmField" (?pmField@?$CVarTypeInfo@D@ATL@@2QEQtagVARIANT@@DEQ3@)
     COMDAT; sym= "public: static unsigned short const ATL::CVarTypeInfo<unsigned char>::VT" (?VT@?$CVarTypeInfo@E@ATL@@2GB)
     ...

pch で静的変数を定義する場合、それを配置する他の合理的な場所はありません。

于 2014-11-05T10:58:54.330 に答える