【问题标题】:What is the CMake equivalent to .vcxproj <ReferenceOutputAssembly>false</ReferenceOutputAssembly>与 .vcxproj <ReferenceOutputAssembly>false</ReferenceOutputAssembly> 等效的 CMake 是什么
【发布时间】:2020-01-12 06:53:10
【问题描述】:

Visual Studio 项目文件的ReferenceOutputAssembly 标记在 CMake 术语中的正确翻译是什么?

  <ItemGroup>
    <ProjectReference Include="..\commonStuff\commonStuff.vcxproj">
      <Project>{fffffff-fffff-ffff-ffff-ffffff}</Project>
      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
    </ProjectReference>
  </ItemGroup>

假设:

add_dependencies(${PROJECT_NAME}
    commonStuff
)

【问题讨论】:

    标签: visual-studio cmake dependencies


    【解决方案1】:

    此 Visual Studio 项目元数据元素用于指定是否将引用项目的输出复制到包含引用项目输出的目录。这是一个简短的article 解释典型用例。如果未设置ReferenceOutputAssembly,则默认行为为true(请参阅this 答案)。

    Visual Studio 项目文件中的 ReferenceOutputAssembly 元素由 CMake 根据依赖项是否为 托管 目标(即 C# 目标或使用 /clr 编译的目标)设置。没有明确的方法可以使用 CMake 命令进行设置。

    如果没有以下条件适用于目标,ReferenceOutputAssembly 将被设置为false

    • 依赖是一个 C# 目标
    • 依赖是CLR目标
    • 依赖项被标记为 WinRT 组件(请参阅VS_WINRT_COMPONENT

    您可以看到 CMake 如何在 CMake 源代码中设置 ReferenceOutputAssembly 元素。将其设置为false 的逻辑是here,而对于.NET/C# 目标,将其设置为true 的逻辑是here。在某些情况下(例如,包含非托管 C++ 和 C++/CLI 混合的 CMake 项目),CMake 不会填充此字段。

    【讨论】:

    • 哦,这是“从 CMake 的角度来看”。是否有任何额外的条件(除了这三个)为什么有人会选择删除该行(通过 Visual Studio 的 GUI)?缺少的行将默认为“true”,对吗?我正在尝试了解一些新的代码库以及 CMake 生成的文件与原始 vcxproj 之间的差异(在此处指出 C++)。
    • @bigla 是的,当您询问“...以 CMake 术语...”时,我认为您想要解释 CMake 处理此项目元数据的方式。为了回答你的问题,我更新了我的帖子。
    • @bigla 我添加了一个解释和一篇小文章来解释典型的用例。
    猜你喜欢
    • 2023-03-13
    • 2021-03-12
    • 1970-01-01
    • 2021-12-08
    • 2019-06-26
    • 2011-03-11
    • 2010-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多