cmake如何在项目的vcxproj PropertyGroup中添加自定义条目?

时间:2017-11-22 12:22:32

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

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

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

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

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

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

如果可以为所有可能的PLATFORM立即设置它,以及是否在ReleaseDebug或其他任何内容中进行编译,那会更好。希望在<PropertyGroup Label="Globals">内添加它可以实现这个目标吗?

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

2 个答案:

答案 0 :(得分:3)

将我的评论转化为答案

要设置全局VS项目属性,您可以使用VS_GLOBAL_<variable>目标属性:

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

<强>参考

答案 1 :(得分:0)

执行此操作的方法可能是生成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标签。