在 MSBuild C++ 的链接库 (grpc) 中链接库时如何停止创建 .asm 文件

How to stop creating .asm files when linking a library in the linked library (grpc) in MSBuild C++

我们有一个静态库,可以导出一些 grpc.pb.cc、grpc.pb.h 文件以及一堆其他普通文件。我们称之为 LibMicroservicesClient。

然后我们有另一个库正在使用 msbuild 中的 ProjectReference linking 这个库:

<ItemGroup>
 <ProjectReference Include="$(MSBuildThisFileDirectory)LibMicroservicesClient.vcxproj">
  <Project>{A397A6CB-641A-41FB-9E8C-2263EC3712E8}</Project>
  <Private>false</Private>
  <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
  <CopyLocalSatelliteAssemblies>false</CopyLocalSatelliteAssemblies>
  <LinkLibraryDependencies>true</LinkLibraryDependencies>
  <UseLibraryDependencyInputs>false</UseLibraryDependencyInputs>      
 </ProjectReference>
</ItemGroup>

在导入此 LibMicroservicesClient 的最终库的 link 处,在中间文件夹中开始生成一堆 .asm 文件。这些文件也在 LibMicroservicesClient 中间文件夹中生成,因此当两个库引用相同的 LibMicroservicesClient 时,它们开始因访问被拒绝而发生冲突,因为它们正在创建相同的 .asm 文件。

如何引用一个根本不会创建 asm 文件的静态库???我怎么能控制这东西。

我们使用的是 Visual Studio 2015。我们使用 MSBuild 进行构建。

啊,我知道了。 link 时间优化和整个程序优化已启用。当禁用 lto 但启用整个程序 opt 时,程序会自动启用 lto。副作用是 .asm 文件不是在库 link 期间生成的,而是在库被 link 编辑为最终可执行文件时生成的。因此禁用 lto 整个程序优化解决了这个