2016-10-28 4 views
0

私は$(OutDir)ディレクトリに必要なすべてののdllをコピーするポストビルドスクリプトを作成しようとしていました。したがって、スクリプトはコピー処理を行うためにAdditionalLibraryDirectoriesAdditionalDependenciesのリストを知っていなければなりません。ポストビルドスクリプトのリンカー設定の取得

誰かがポストビルドイベントスクリプトでそれらにアクセスする方法を知っていますか?このような

+0

プロジェクトファイルにカスタムMSBuildのターゲットを追加する方が簡単かもしれないが、それは構文です通常それを作りますこのように、特にバッチファイルと比べて、物事をコピーする方が簡単です。 @(Link - > '%(AdditionalDependencies)')のようなライブラリを参照することができます – stijn

+0

@stijnこれは興味深いと思います。詳細を教えてください。 –

+0

@stijnこれらのリストのアイテムを、mysustのmsbuildタスクで繰り返し処理できますか? –

答えて

0

何かが、開始すること<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets"/>行の後に、プロジェクトファイルのどこかにそれを追加する必要があります

<Target Name="GetFullLibPaths" AfterTargets="Build"> 
    <ItemGroup> 
    <Libs Include="%(Link.AdditionalDependencies)"/> 
    <LibDirs Include="%(Link.AdditionalLibraryDirectories)"/> 
    <!-- Combine them, 'cross product' --> 
    <LibsAndDirs Include="@(Libs)"> 
     <Dir>%(LibDirs.Identity)</Dir> 
    </LibsAndDirs> 
    <!-- Filter on those which actually exist --> 
    <LibPaths Include="@(LibsAndDirs)" Condition="Exists('%(LibsAndDirs.Dir)%(LibsAndDirs.Identity)')"> 
     <FullLibPath>%(Dir)\%(Identity)</FullLibPath> 
    </LibPaths> 
    </ItemGroup> 

    <Message Text="MatchingLibs = %(LibPaths.FullLibPath)" /> 
</Target> 

それは、ビルド、リストのライブラリとディレクトリ後に自動的に実行され、効果的にライブラリを検索します(標準のuser32.libなどをスキップするために)ライブラリのディレクトリに存在します。あなたはその後、DLLを想定し、OUTDIRにそれらのDLLをコピーすることができ

が同様にライブラリのディレクトリにあります。

<Copy SourceFiles="%(LibPaths.Dir)\%(LibPaths.Filename).dll" DestinationFiles="$(OutDir)"/> 
+0

プロジェクトの上位コードスニペットをプロジェクトvcyprojに挿入した後、このプロジェクトをコンパイルするときにVisual Studioの出力ウィンドウにメッセージは表示されません。 –

+0

それは奇妙で、 'MatchingLibs ='さえない?どこにコードを正確に挿入しましたか?プロジェクトがビルドされていますか(たとえば、VSがビルドを開始しない場合など) – stijn

関連する問題