簡體   English   中英

cmake如何在項目的vcxproj PropertyGroup中添加自定義條目?

[英]How can cmake add custom entry in a project's vcxproj PropertyGroup?

我正在使用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在項目文件中設置此值?

把我的評論變成答案

要設置全局VS項目屬性,可以使用VS_GLOBAL_<variable>目標屬性:

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

參考

一種方法是生成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標簽。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM