gpt4 book ai didi

c++ - 默认用户特定属性

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:07:05 37 4
gpt4 key购买 nike

我正在处理一个项目,该项目需要设置一个名为 $(LibPath) 的属性。该值应由插件设置,但它保存在 projectname.vcxproj.user 文件中。当某人删除了此文件(例如通过 git clean)或新开始该项目时,这是一个问题。

为了有一个默认值,我创建了一个属性表,它被插入到项目文件的最顶部。

<PropertyGroup Label="UserMacros">
<LibPath Condition="'$(LibPath)' == ''">PathToLib</LibPath>
</PropertyGroup>
<ItemGroup>
<BuildMacro Include="LibPath">
<Value>$(LibPath)</Value>
</BuildMacro>
</ItemGroup>

它现在适用于路径与默认路径匹配的每个人。如果没有,他们可以在 VS 中通过转到 Property Manager -> Properties Sheet file -> User Macros 来更改它。

现在剩下的问题是,当这个路径不匹配并需要更改时,Propety Sheet 中的值也会更改。

所以我的问题:有没有一种方法可以定义一个可以在 VS 中编辑的属性,然后将其保存在 vcxproj.user 文件(或任何其他覆盖默认值的用户特定文件)?

最佳答案

Is there a way to define a property that can be edited from within VS that is saved in the vcxproj.user file?

AFAIK,恐怕当路径不匹配时您无法在 Visual Studio 中编辑定义的属性的原因是 vcxproj.user 文件是在 Propety Sheet 之后导入的

如果我们创建属性表,我们将得到以下导入文件 TestSheet.props在项目文件中:

  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="TestSheet.props" />
</ImportGroup>

vcxproj.user文件通过以下Import方式导入:

 <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />

这个文件在TestSheet.props下在项目文件中:

enter image description here

在这种情况下,MSBuild 将使用 $(LibPath) 的值在 vcxproj.user 文件中替换属性表中的值。因此它仅适用于路径与默认值匹配的每个人,如果您通过转到属性管理器 -> 属性表文件 -> 用户宏更改值,该值将被下一个导入文件覆盖 Microsoft.Cpp.targets .

要解决此问题,您可以评论所有 <Import Project="TestSheet.props" />项目文件中的行,并在导入后添加此行 Microsoft.Cpp.targets文件:

<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<Import Project="TestSheet.props" />

使用此设置,如果您更改用户宏中的值,此值将覆盖 vcxproj.user 中的值文件。

关于c++ - 默认用户特定属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48179251/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com