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

Oph*_*tan 6 c++ msbuild visual-studio-2010

简短的问题:

我希望能够使用props文件的路径作为来自props文件内部的宏(比如能够引用项目目录$(ProjectDir))

长问题

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

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

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

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

Mar*_* Ba 16

解决方案是:( $(MSBuildThisFileFullPath)或者更确切地说$(MSBuildThisFileDirectory)).(通过这里注明.)

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

使用VS2013 RC和VS2010进行测试.


Chr*_*thy 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>
Run Code Online (Sandbox Code Playgroud)


Joh*_*ing 1

我建议您有利益冲突:

  1. #include提供所有开发人员都使用的 props 文件,并消除开发人员限定路径的需要
  2. 允许所有开发人员指定这些#include路径的根位置。

这不是您正在寻找的答案,但我建议您采取不同的方法。

我想到了两个:

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

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

2 号的优点是可以更轻松地在中继之间切换。也许您的应用程序的版本 1.0 是您的应用程序的 Beta 2.0。您可以在两者中使用相同的 props 文件;当从一个主干移动到另一个主干时,开发人员只需运行一个批处理文件即可切换路口。

然而,Number 1 的优点是它是完全封闭在 IDE 中的解决方案。