在后期构建脚本中获取链接器设置

时间:2016-10-28 07:02:18

标签: visual-c++ visual-studio-2015 msbuild post-build-event

我正在尝试编写一个构建后脚本,该脚本应将所有必需的 dll 复制到$(OutDir)目录中。因此,脚本必须知道AdditionalLibraryDirectoriesAdditionalDependencies的列表才能执行复制过程。

有人知道如何在post-build-Event脚本中访问它们吗?

1 个答案:

答案 0 :(得分: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)"/>