7

简短的问题:

我希望能够将道具文件的路径用作道具文件内部的宏(例如将项目目录引用为的能力$(ProjectDir)

长问题

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

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

但是,我想指定一个相对路径——因为不同的团队成员对源代码管理树使用不同的位置。有没有一种方法可以将这样的相对路径添加到 props 文件中?

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

4

3 回答 3

20

解决方案是:($(MSBuildThisFileFullPath)或者,更确切地说$(MSBuildThisFileDirectory)(此处顺便提及。)

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

用 VS2013 RC 和 VS2010 测试。

于 2013-10-11T11:04:59.830 回答
5

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

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

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

编辑:

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

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

  <ImportGroup Label="PropertySheets">
      <Import Project="relativepath.props" />
      <Import Project="realprops.props" />
    </ImportGroup>
于 2012-05-10T14:20:25.307 回答
1

我建议你有利益冲突:

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

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

想到两个:

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

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

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

但是,1 号具有完全包含在 IDE 中的解决方案的优势。

于 2012-05-01T16:35:14.513 回答