【问题标题】:Let CMake set the "Exclude From Build" option for a single source file in Visual Studio让 CMake 为 Visual Studio 中的单个源文件设置“从构建中排除”选项
【发布时间】:2019-01-17 17:25:22
【问题描述】:

在 Visual Studio 中,每个源文件的属性页面中都有一个“从构建中排除”选项,可以将其设置为从构建中排除该文件,但在源树中保持可见:

有没有办法使用 CMake 设置该特定属性? 我找到了一个VS_DEPLOYMENT_CONTENT 属性并尝试了它但没有成功(它似乎没有做任何事情)。

使用该属性的原因主要是为了将文件保留在项目中,以便能够从 Visual Studio 中打开和编辑它。

提前致谢!

【问题讨论】:

  • 只是不要在 cmake 中列出这个文件。
  • @VTT 当然,这是最简单的解决方案!但是,该文件应该出现在 VS 的项目中,所以它必须以某种方式在 CMake 中列出,不是吗?
  • 即使文件没有出现在任何解决方案中,您也可以在VS中打开文件。
  • 正如我在上一条评论中提到的:该文件应该是解决方案的一部分。我知道你可以在 VS 中打开任何文件,但这并不能回答我的问题?!​​

标签: c++ visual-studio cmake


【解决方案1】:

不幸的是,我也找不到如何在同一个项目中使用 cmake 为某些文件设置“从构建中排除”的答案。目前,我已将所有此类文件添加到 add_custom_target 创建的目标中。

if(MSVC)
  add_custom_target(myproj.additional SOURCES ${otherHeaders} ${otherSources})
endif()

这将在解决方案中创建一个额外的项目。此项目中的文件不会编译,我仍然可以在其中编辑和搜索。

另一个选项是为不应编译的源设置HEADER_FILE_ONLY 属性:

if(MSVC)
  set_source_files_properties(${otherSources} PROPERTIES
    HEADER_FILE_ONLY TRUE
  )
endif()

在这种情况下,文件保留在项目中但没有任何标记 - 此类文件的外观与已编译的文件没有区别

【讨论】:

    【解决方案2】:

    从 CMake 3.18 开始,您可以使用 VS_SETTINGS。这允许您设置任何您喜欢的 VS 项目设置。

    set_property(SOURCE ${SourceFiles} PROPERTY VS_SETTINGS "ExcludedFromBuild=true")
    

    请注意,您必须使用写入 vcxproj 文件中的名称设置设置值。要知道设置的名称,您可以通过 VS IDE 将设置设置为正确的值,保存项目,然后在文本编辑器中打开 vcxproj 文件并搜索正确的设置值对。 例如,如果从构建中排除:

    <FXCompile Include="C:\path\to\source\file\file.hlsl">
      <ExcludedFromBuild>true</ExcludedFromBuild>
    </FXCompile>
    

    【讨论】:

    • 根据源代码,VS_SETTINGS 只有在它是“额外”源文件时才会被查询;见cmVisualStudio10TargetGenerator::WriteExtraSource()。并且SourceKindExtra 仅在目标是实用程序或接口库时设置,或者如果源文件未被识别(请参阅cmGeneratorTarget::ComputeKindedSources())。所以它适用于您的 .hlsl 示例,但不适用于 .c 或 .cpp 文件。
    • This merge request 解决了这个问题。
    • 合并请求已经accepted
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-17
    • 1970-01-01
    • 2012-08-10
    • 1970-01-01
    • 1970-01-01
    • 2022-07-12
    相关资源
    最近更新 更多