Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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.

like image 590
Nosturion Avatar asked Jan 27 '26 10:01

Nosturion


2 Answers

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

like image 127
Nosturion Avatar answered Jan 28 '26 23:01

Nosturion


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>
like image 35
Anton Breusov Avatar answered Jan 28 '26 22:01

Anton Breusov



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!