我正在使用cmake生成多平台C ++项目的Windows / VisualStudio解决方案。
项目的属性中有一个特定的条目(文件夹数据的简单路径),我希望cmake能为我填写。此条目是由我无法修改的外部插件添加的。
在VS项目属性中填写选项会在MyAppExecutable.vcxproj
文件中添加以下条目:
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|PLATFORM'">
<AppDataFolder>D:\myappdata</AppDataFolder>
</PropertyGroup>
我希望cmake为我添加这个AppDataFolder
值。
如果可以为所有可能的PLATFORM
立即设置它,以及是否在Release
,Debug
或其他任何内容中进行编译,那会更好。希望在<PropertyGroup Label="Globals">
内添加它可以实现这个目标吗?
有没有办法让cmake在项目文件中设置这个值?
答案 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
标签。