【问题标题】:visual studio macro with the path of a props file带有 props 文件路径的 Visual Studio 宏
【发布时间】:2012-05-01 15:45:18
【问题描述】:

简短的问题:

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

长问题

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

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

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

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

【问题讨论】:

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


【解决方案1】:

解决方案是:$(MSBuildThisFileFullPath) (or, rather $(MSBuildThisFileDirectory))(顺便提及here。)

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

使用 VS2013 RC 和 VS2010 测试。

【讨论】:

    【解决方案2】:

    @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>
    

    【讨论】:

    • 感谢这个想法,虽然我猜你每次在本地机器上移动东西或分支代码时仍然需要编辑 realprops.props?我想也许你可以用脚本自动生成这个文件......我希望微软可以添加一个简单的功能,比如 abspath(在 make 中),这将有助于解决这些问题!
    【解决方案3】:

    我建议你有利益冲突:

    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 中的解决方案。

    【讨论】:

      猜你喜欢
      • 2017-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-12
      • 2022-07-26
      相关资源
      最近更新 更多