在visual studio中包含相对于props文件的路径

时间:2017-06-06 09:19:46

标签: c++ visual-studio visual-c++ include-path

我正在尝试创建包含要在我所有c ++项目中使用的包含路径的属性文件。

这是存储库结构。

/
    /Libs
        /Libs2
            A.h
         B.h
    /Sln1
        Sln1.sln
        Proj1.vcxproj
    Sln2.sln
    Proj2.vcxproj
    Props.props

我想使用属性文件(Props.props)为这两个项目添加以下包含路径(C:\\ Libs; C:\\ Libs \ Libs2)。

目前我的属性文件中有宏:

Name          Value
ProjRoot      C:\<path to rep root>

我在包含字符串中使用它:$(ProjRoot)\ Libs; $(ProjRoot)\ Libs \ Libs2

此解决方案的问题是宏值中的硬编码绝对路径。如果我的存储库将被克隆到另一个驱动器上,我将不得不手动更改它。

我可以在宏值中使用相对于属性文件的路径吗?

即:

Name          Value
ProjRoot      ./

其中./将解析所有将使用此属性文件的项目中的Props.props文件的路径。

我不能使用$(SolutionDir)和$(ProjectDir),因为可能存在不同嵌套级别的解决方案和项目,因此相对于它们的路径不起作用。

谢谢。

2 个答案:

答案 0 :(得分:3)

这样做应该手动编辑道具文件并包含以下内容:

<PropSheetPath>$([System.IO.Path]::GetFullPath('$(MSBuildThisFileDirectory)'))</PropSheetPath>

这将使用属性文件夹创建属性PropSheetPath

在这里找到答案:

https://social.msdn.microsoft.com/Forums/vstudio/en-US/2817cae7-3a71-4701-839a-9bf47af7c498/property-sheets-macro-to-reference-location-of-property-sheet?forum=vcgeneral

答案 1 :(得分:1)

只是为了改善先前的答案...这里是一个完整的示例(我正在使用一堆小的属性表以模块化的方式添加第三方库)。这是一个示例,用于添加路径以包括C ++编译器的文件夹和用于链接程序的库文件夹,以将CEGUI库添加到项目中(调试版本,我使用单独的ProSheet进行发布)。

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ImportGroup Label="PropertySheets" />
  <PropertyGroup Label="UserMacros">
    <PropSheetPath>$([System.IO.Path]::GetFullPath('$(MSBuildThisFileDirectory)'))</PropSheetPath>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Language)'=='C++'">
    <CAExcludePath>$(PropsheetPath)..\..\install\windows\Debug\include\cegui-0;$(CAExcludePath)</CAExcludePath>
  </PropertyGroup>
  <ItemDefinitionGroup>
    <ClCompile>
      <PreprocessorDefinitions>CEGUI_STATIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <AdditionalIncludeDirectories>$(PropsheetPath)..\..\install\windows\Debug\include\cegui-0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
    </ClCompile>
    <Link>
      <AdditionalLibraryDirectories>$(PropsheetPath)..\..\install\windows\Debug\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
      <AdditionalDependencies>DbgHelp.lib;CEGUIBase-0_Static_d.lib;CEGUICommonDialogs-0_Static_d.lib;CEGUICoreWindowRendererSet_Static_d.lib;CEGUIExpatParser_Static_d.lib;CEGUIOpenGLRenderer-0_Static_d.lib;CEGUITGAImageCodec_Static_d.lib;%(AdditionalDependencies)</AdditionalDependencies>
    </Link>
  </ItemDefinitionGroup>
  <ItemGroup />
</Project>