2016-04-15 11 views
0

で自分自身を参照してください:限り私は何ここで起こっていることは、それができるようにjcapimin.cのAdditionalIncludeDirectoriesメタデータプロパティが設定されていることを知っているようなぜVisual Studioでの特性は例えばマクロ

See image

後でコンパイラコマンドラインの%(AdditionalIncludeDirectories)マクロで参照されます。ラインの下の何かが%(AdditionalIncludeDirectoriesを)持っている情報、検索ニーズをマクロを%(AdditionalIncludeDirectories)を使用してこの情報を取得する際のそれ

+0

それが後で変更されると、その変更は1か所でのみ行われ、その変更はそのマクロを使用するすべての場所に自動的に反映されます。 –

+0

マクロが何をしているかを説明しているように聞こえます。この状況で、マクロ%(AdditionalIncludeDirectories)がどこかで使用された場合、返される値には、マクロ自体の名前が最後に含まれます。どうして? – comenica

答えて

1

値の末尾に貼り付けなぜ

は、だから私は理解していないものがあります変数(プロパティ、項目、メタデータなど)はMsBuildでは自動的に継承されませんが、代わりに同じ名前の新しい宣言が前の値overrideに継承されます。だから、が付加されません%(AdditionalIncludeDirectories)場合AdditionalIncludeDirectoriesの新しい値がちょうどだろう.... \ JPEG; .... \ JPEG \ SIMD部分とコンパイラがすることができません

表示されているようなプロパティページは、テキストファイルエディタでプロジェクトファイルを開くと簡単に確認できるmsbuildのユーザーインターフェイスですので、ここでは何が起こるかの架空のサンプルがありますMsBuild:

<!--Somewhere in the msbuild files with compiler options--> 
<ItemGroup> 
    <AdditionalIncludeDirectories Include="$(VCInstallPath)\include"/> 
</ItemGroup> 

上記のファイルのコードは、最終的にpこれで、コンパイラのインクルード検索パスにディレクトリを追加します。あなたはその後、AdditionalIncludeDirectoriesの新しい値がちょうどです.. \ JPEG

<ItemGroup> 
    <AdditionalIncludeDirectories Include="..\jpeg"/> 
</ItemGroup> 

を書きたいとしよう。値がに展開されるように、我々は.. \ JPEGではなく

<ItemGroup> 
    <AdditionalIncludeDirectories Include="..\jpeg;%(AdditionalIncludeDirectories)"/> 
</ItemGroup> 

を使用する理由である; $(VCInstallPath)\が含まれます。

関連のない発言:通常、そのようなファイルごとにディレクトリを含めるように宣言するべきではありません。 jpegインクルードパスが必要な2番目のファイルがあるとしたら、自分自身を繰り返して同じことを書き直す必要があります。プログラミングで自分を繰り返すことは、ほとんど常に間違っています。プロジェクトレベルでインクルードパスを宣言すると良いスタートになります。プロジェクト間で同じパスを繰り返したくない場合は、property sheetsを参照してください。

+0

それはあなたに追加するか、それを置き換えるかの選択肢を与えることです。私はそれに満足しています。 – comenica

+0

よく、それは実際には選択肢ではありません:ほとんどの場合、コンパイラ/リンカーのフラグ、インクルードパス、ライブラリパスなどを置き換えたくない場合があります。 – stijn

+0

エッジケースが存在する必要があります。 。必要がなければ、マクロ名を追加することなく、既定で以前の定義からプロパティを継承することができます。 – comenica

関連する問題