none
Precompiled code(.pch)の利用方法について RRS feed

  • 質問

  • あるSolutionに3つのProject(A,B,C すべてDLL)があります。
    各ProjectではそれぞれPrecompiled codeを生成し、利用しています。
    各ProjectのBuild順と依存関係は以下のとおりです。
    A -> B -> C
    また、各Projectは依存するProjectのHeader FileをPrecompile headerにincludeして、Precompiled codeを生成しています。

    この時、Project BはProject Aの生成済みのPrecompiled codeをincludeしてProject BのPrecompiled codeを生成し、Project Bで利用する方法はありますでしょうか?
    Project Cでも同様にProject Bの生成済みのPrecompiled codeをincludeしてProject CのPrecompiled codeを生成し、Project Cで利用する方法はありますでしょうか?

    Precompile codeのRuleとして、/Dやdefineが同じであることなど、Headerの解釈の仕方が変わらないことが前提となっています。

    • 種類を変更済み kozz 2011年3月22日 10:19
    • 種類を変更済み kozz 2011年3月22日 10:19
    2011年3月22日 10:01

回答

  • pchには、コンパイル時に随所で指定している $(IntDir) の展開情報などがフルパスでセットされています(相対ではない)。そのため、プロジェクトのフォルダ構成が同じ(ありえないわけですが...)じゃない限り、一致させることはできないと思います(fc /b とかで比較するとすぐわかります)。

    もしかしたら設定をうまくやれば、同じ内容にできるかもしれませんが、私はその方法を知りません。pdbをフルパスにしないのと同様できるとは思うんですが。。。

    で、pchファイルの出力結果を同じにできる場合ですが、プリコンパイルヘッダーを利用の部分でpchのパスを指定できるのでそこを書き換えてやれば行けると思います。

     


    わんくま同盟,Microsoft MVP for Visual C++(Oct 2005-) http://blogs.wankuma.com/tocchann/
    • 回答としてマーク kozz 2011年3月23日 8:30
    2011年3月22日 14:11
  • 1.「一つのソース」は「一つのプリコンパイル済みヘッダー」しか使えない
    2.あるソースに「プリコンパイル済みヘッダーを作成する」と「利用する」
      を同時に適用できない。
    の、2つの原則から、ご希望の動作はできないと考えられます。

    ただし、Aのプリコンパイル済みヘッダーをCのメンバーのソースに
    適用することはできます。この場合、当該ソースはCのプリコンパイル済み
    ヘッダーを使用することはできなくなりますけど。

    • 回答としてマーク kozz 2011年3月23日 8:31
    2011年3月23日 3:50

すべての返信

  • pchには、コンパイル時に随所で指定している $(IntDir) の展開情報などがフルパスでセットされています(相対ではない)。そのため、プロジェクトのフォルダ構成が同じ(ありえないわけですが...)じゃない限り、一致させることはできないと思います(fc /b とかで比較するとすぐわかります)。

    もしかしたら設定をうまくやれば、同じ内容にできるかもしれませんが、私はその方法を知りません。pdbをフルパスにしないのと同様できるとは思うんですが。。。

    で、pchファイルの出力結果を同じにできる場合ですが、プリコンパイルヘッダーを利用の部分でpchのパスを指定できるのでそこを書き換えてやれば行けると思います。

     


    わんくま同盟,Microsoft MVP for Visual C++(Oct 2005-) http://blogs.wankuma.com/tocchann/
    • 回答としてマーク kozz 2011年3月23日 8:30
    2011年3月22日 14:11
  • 1.「一つのソース」は「一つのプリコンパイル済みヘッダー」しか使えない
    2.あるソースに「プリコンパイル済みヘッダーを作成する」と「利用する」
      を同時に適用できない。
    の、2つの原則から、ご希望の動作はできないと考えられます。

    ただし、Aのプリコンパイル済みヘッダーをCのメンバーのソースに
    適用することはできます。この場合、当該ソースはCのプリコンパイル済み
    ヘッダーを使用することはできなくなりますけど。

    • 回答としてマーク kozz 2011年3月23日 8:31
    2011年3月23日 3:50
  • 有難うございます。
    既存のPCHを含んで新たなPCHを作るのは無理ですね。

    Precompile Headerに#include "XXX.PCH"と記述出来ればよかったのですが、そのような機能はないですね。

    2011年3月23日 8:30