视觉工作室宏与道具文件的路径

时间:2012-05-01 15:45:18

标签: c++ visual-studio-2010 msbuild

简短的问题:

我希望能够将props文件的路径用作props文件内部的宏(就像将项目目录引用为$(ProjectDir)一样)

长问题

我使用道具文件来添加对各种第三方库的引用。

如果我可以指定第三方库的绝对路径,这很简单。

但是,我想指定相对路径 - 因为不同的团队成员对源控件树使用不同的位置。 有没有方法将这些相对路径添加到props文件?

指定相对于项目目录的路径也不是一个好的解决方案,因为项目的位置不固定(因此对于一个项目我需要$(SolutionDir)\..\XXXX而另一个项目我需要$(SolutionDir)\..\..\XXXX 1}}

3 个答案:

答案 0 :(得分:16)

解决方案是:$(MSBuildThisFileFullPath) (or, rather $(MSBuildThisFileDirectory))(通过here时注明。)

如果在属性表文件(.props)中使用它,它将引用此属性文件/ dir本身。 (注意:在.vcxproj级别使用时,它将引用项目文件/目录。

使用VS2013 RC和VS2010进行测试。

答案 1 :(得分:5)

@John Dibling:对于在并发分支上工作的任何组来说,这是一个糟糕的解决方案;您必须始终切换环境,或在每个分支上本地编辑.props文件。当你不断切换分支时,这很痛苦。

不幸的是,我似乎无法找到更好的解决方案。在我的脑海中,顶级.props定义了一个用户宏,如PROJECT_ROOT(定义为'../../'),然后其他.props文件继承并使用该宏。这样,您可以与多个不同相对路径中的解决方案共享一个.props文件。不幸的是,看起来用户宏不会在.props文件中继承。

必须有一个真正的解决方案,不涉及在多个分支上给定静态目录结构的本地配置构建环境。

编辑:

看起来我找到了这个解决方案,真实的。基本上你有一个relativepath.props文件,用你的相对路径定义一个用户宏,另一个道具文件使用该宏的所有路径,然后你实际导入vcxproj的文件将如下所示,包括两个属性表。这是我从其他文件中的一个文件中使用宏的唯一方法。

然后,不同相对路径中的不同解决方案可以使用不同的路径,而属性仅在realprops.props中定义一次。

  <ImportGroup Label="PropertySheets">
      <Import Project="relativepath.props" />
      <Import Project="realprops.props" />
    </ImportGroup>

答案 2 :(得分:1)

我建议您有利益冲突:

  1. 提供所有开发人员使用的道具文件,并且无需开发人员限定#include路径
  2. 允许所有开发人员指定这些#include路径的根位置。
  3. 这不是你想要的答案,但我建议你采取不同的方法。

    两个想到:

    1. 让每个开发人员在Microsoft.Cpp.x64.user文件中定义构建时宏,例如$(MY_PROJECT_ROOT),并在签入的道具文件中,指定相对于这些宏的目录。

    2. 在签到的道具文件中使用绝对路径,但将该绝对路径设为交接点,例如X:\。每个开发人员都会定义X:\指向的位置。

    3. Number 2的优点是可以更容易地在中继之间切换。或许可以说你的1.0版本应用程序的Beta 2.0。你可以在两者中使用相同的道具文件;开发人员只需运行批处理文件即可在从一个主干移动到另一个主干时切换联结。

      然而,Number 1的优势在于它完全包含在IDE中。