【问题标题】:How can cmake add custom entry in a project's vcxproj PropertyGroup?cmake 如何在项目的 vcxproj PropertyGroup 中添加自定义条目?
【发布时间】:2017-11-22 12:22:32
【问题描述】:

我正在使用 cmake 生成一个多平台 C++ 项目的 Windows/VisualStudio 解决方案。

我希望 cmake 为我填写项目属性中的特定条目(文件夹数据的简单路径)。此条目是由我无法修改的外部插件添加的。

在 VS 项目属性中填写选项会在 MyAppExecutable.vcxproj 文件中添加以下条目:

<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|PLATFORM'">
  <AppDataFolder>D:\myappdata</AppDataFolder>
</PropertyGroup>

我希望 cmake 为我添加这个 AppDataFolder 值。

如果它可以同时为所有可能的PLATFORM 设置它会更好,无论是在ReleaseDebug 还是其他任何地方编译。希望在&lt;PropertyGroup Label="Globals"&gt; 中添加它可以实现这个目标?

有没有办法让 cmake 在项目文件中设置这个值?

【问题讨论】:

  • 你可以试试set_target_properties(MyAppExecutable PROPERTIES VS_GLOBAL_AppDataFolder "D:\\myappdata")
  • 我试过了,效果很好!谢谢你的建议。你能回答一下,以便我可以选择它作为解决方案吗?
  • 不客气。将我的评论放入答案中。如果 CMake 知道路径,我认为您甚至可以使用 $&lt;SHELL_PATH:...&gt; 生成器表达式(以避免手动转换为反斜杠)。

标签: c++ visual-studio visual-c++ cmake


【解决方案1】:

把我的评论变成答案

要设置全局 VS 项目属性,您可以使用 VS_GLOBAL_&lt;variable&gt; 目标属性:

set_target_properties(MyAppExecutable PROPERTIES VS_GLOBAL_AppDataFolder "D:\\myappdata")

参考

【讨论】:

    【解决方案2】:

    一种方法可能是生成一个 PowerShell 脚本并让 cmake 在生成过程结束时调用它。

    这是我编写的 PowerShell 脚本示例:

    $myvcxprojpath = 'D:\build\myapp\PLATFORM\MyAppExecutable.vcxproj'
    $mydatapath = 'D:\myappdata'
    
    [xml]$xml = (Get-Content $myvcxprojpath)
    $globalpropgroup = $xml.Project.PropertyGroup | where {$_.Label -eq 'Globals'}
    $datapath = $globalpropgroup.AppDataFolder
    if ($datapath -eq $null)
    {
        $newNode = $xml.CreateElement("AppDataFolder")
        $newNode.set_InnerXML($mydatapath)
        $globalpropgroup.AppendChild($newNode)
    }
    else
    {
        $globalpropgroup.AppDataFolder= $mydatapath
    }
    $xml = [xml]$xml.OuterXml.Replace(" xmlns=`"`"", "")
    $xml.Save($myvcxprojpath)
    

    此脚本查找 AppDataFolder 条目。如果它不存在,它会创建一个;在另一种情况下,它只是更新其内容。

    我必须添加一行来删除新 xml 节点中的空 xmlns 标签。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-06
      • 2017-11-21
      • 1970-01-01
      • 2014-03-17
      • 2011-10-02
      • 1970-01-01
      • 2015-12-12
      • 1970-01-01
      相关资源
      最近更新 更多