我正在尝试创建包含要在我所有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),因为可能存在不同嵌套级别的解决方案和项目,因此相对于它们的路径不起作用。
谢谢。
答案 0 :(得分:3)
这样做应该手动编辑道具文件并包含以下内容:
<PropSheetPath>$([System.IO.Path]::GetFullPath('$(MSBuildThisFileDirectory)'))</PropSheetPath>
这将使用属性文件夹创建属性PropSheetPath
。
在这里找到答案:
答案 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>