Nosturion
Nosturion

Reputation: 309

Include path relative to props file in visual studio

I'm trying to create property file with include path to use in all my c++ project.

Here is repository structure.

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

I want use property file (Props.props) to add the following include path to both projects ( C:\\Libs;C:\\Libs\Libs2).

Currently I have macro in my property file:

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

And I use it in include string: $(ProjRoot)\Libs;$(ProjRoot)\Libs\Libs2

The problem with this solution is hardcoded absolute path in macro value. If my repository will be cloned on another drive I will have to change it manually.

Can I use path relative to property file in macro value?

I.e.:

Name          Value
ProjRoot      ./

Where ./ will resolve to path of Props.props file in all projects which will use this property file.

I cannot use $(SolutionDir) and $(ProjectDir) because there are may solutions and projects in different nesting level so path relative to them would not work.

Thank you.

Upvotes: 3

Views: 3229

Answers (2)

Anton Breusov
Anton Breusov

Reputation: 57

Just to improve previous answer... Here how it looks as a full example (I'm using a bunch of small property sheets to add third party libraries in a modular way). This is an example for adding paths to include folders for C++ compiler and library folders for linker to add CEGUI library into project (debug version, I use separate prop sheet for Release).

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

Upvotes: 2

Nosturion
Nosturion

Reputation: 309

Do do this one should manually edit props file and include the following:

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

This will create property PropSheetPath with property file folder.

Found the answer here:

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

Upvotes: 5

Related Questions