Visual Studio 2010 C++ 屬性設定基礎

來源:互聯網
上載者:User

標籤:搜尋   運算式   span   搜尋路徑   www   技術分享   imp   優先   display   

在 《Visual Studio 2010 C++ 工程檔案解讀》中提到了C++工程中可以進行使用者自訂的屬性設定,如何進行屬性設定呢?

下面我們來瞭解一下 props 檔案的基本規則:

1、在 PropertyGroup 元素中放置子項目就是定義屬性,屬性的值就是子項目的內容;例如

<PropertyGroup>
<OutputDriver>D:\</OutputDriver>
</PropertyGroup>

 

定義來一個屬性 OutputDriver 值為 D:\

 

2、定義元素時可以通過條件來讓屬性定義在特定的條件下起作用,例如:

<PropertyGroup>
<SingleFolder Condition="‘$(SingleFolder)‘ == ‘‘">false</SingleFolder>
</PropertyGroup>

只有當 SingleFolder 屬性沒有定義或者定義的值為空白時,將 SingleFolder 的屬性定義為 false ; 如果屬性群組中只有一個屬性,或者一個屬性群組中的多個屬性有相同的條件,則可以把條件放置到 PropertyGroup 元素中;

 

3、條件運算式可以使用 "=="、"!=" 進行判斷,也可以對數值進行“>”、“>=”、“<”、“<=”判斷,並且可以對目錄進行“Exists”和“HasTrailingSlash”判斷,同時可以對錶達式進行 “!” 或對多個運算式進行 “AND”、“OR”等操作,可以參考 http://msdn.microsoft.com/en-us/library/7szfhaft.aspx  

 

4、值的定義可以進行繼承,其實就是在原有的值的基礎上增加新的值,如下所示:

<PropertyGroup Condition="Exists(‘$(ImportFolder)‘)">
<LibraryPath>$(ImportFolder);$(LibraryPath)</LibraryPath>
</PropertyGroup>

 

如果屬性“ImportFolder”指定的目錄存在,那麼將該目錄增加到“庫”的搜尋路徑中,並且優先順序在預設搜尋路徑的前面;

 

5、可以使用 .net 的函數進行判斷或者屬性值的定義,例如定義解決方案檔案所在的磁碟機可以使用如下的定義:

<PropertyGroup Condition="‘$(SolutionDriver)‘ == ‘‘" >
<SolutionDriver>$([System.IO.Path]::GetPathRoot($(SolutionDir)))</SolutionDriver>
</PropertyGroup>

 

6、可以使用 import 元素匯入其他的屬性設定檔案,例如需要匯入一個解決方案同名的屬性檔案:

<ImportGroup>
<Import Project="$(UserRootDir)\Microsoft.Cpp.Common.user.props" />
</ImportGroup>

 

說明:UserRootDir 是 C++ 預設屬性檔案中定義的屬性,值為 $(LOCALAPPDATA)\Microsoft\MSBuild\v4.0\

 

7、如果匯入的屬性檔案需要在 Visual Studio 2010 的 "屬性管理員" (Property Manager)視窗中可以看到,那麼在 ImportGroup 元素中增加特定的屬性即可,如下所示:

<ImportGroup Label="PropertySheets">
<Import Project="$(ProjectPath).props" Condition="Exists(‘$(ProjectPath).props‘)" />
</ImportGroup>

 

則如果一個工程檔案的目錄下存在 .vcxproj.props 將匯入該檔案,例如工程檔案為 MyProj.vcxproj 並且在工程目錄下存在 MyProj.vcxproj.props檔案則會自動匯入檔案 MyProj.vcxproj.props 屬性檔案

 

8、如果在 Property Manager 視窗中希望看到的屬性檔案名稱不是檔案名稱,而是自定的名稱,那麼可以再屬性檔案中增加一個特定的屬性定義來實現,例如:

<PropertyGroup>
<_PropertySheetDisplayName>Cpp Common Properties</_PropertySheetDisplayName>
</PropertyGroup>

 

好了,基本規則我們已經掌握了(複雜的可以研究 VS2010 的 props 檔案和查看 MSDN),下面來看看編譯和連結的選項如何設定:

1、編譯的選項放置在 ItemDefinitionGroup 元素的 ClCompile 子項目中,例如下面的定義:

<ItemDefinitionGroup>
<ClCompile>
<PreprocessorDefinitions>ISF_BUILD_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PrecompiledHeaderFile>ISF/Stable_Headers.h</PrecompiledHeaderFile>
<PrecompiledHeader>Use</PrecompiledHeader>
</ClCompile>
</ItemDefinitionGroup>

在這個定義中,首先增加來一個宏定義“ISF_BUILD_DLL”,然後是定義先行編譯標頭檔的名稱“ISF/Stable_Headers.h”,而不是預設的“stdafx.h”,最後定義來先行編譯標頭檔的使用規則是“使用先行編譯標頭檔”,這就要求所有的C/C++檔案必須在最前麵包含標頭檔 “ISF/Stable_Headers.h”,除非在檔案上指定不使用先行編譯標頭檔;

 

2、連結的選項放置在 ItemDefinitionGroup 元素的 Link 子項目中,例如下面的定義:

<ItemDefinitionGroup>
<Link>
<ProgramDatabaseFile>$(SymbolFolder)$(OutputName).pdb</ProgramDatabaseFile>
<ImportLibrary>$(ImportFolder)$(OutputName).lib</ImportLibrary>
</Link>
</ItemDefinitionGroup>

在這個定義中,指定了輸出的私人的 pdb 檔案的輸出全路徑和動態庫的匯入庫的輸出全路徑;

 

3、庫的選項放置在 ItemDefinitionGroup 元素的 Lib 子項目中,例如下面的定義:

<ItemDefinitionGroup>
<Lib>
<LinkTimeCodeGeneration>true</LinkTimeCodeGeneration>
</Lib>
</ItemDefinitionGroup>

定義了靜態庫產生時的代碼產生行為是“串連時代碼產生”;

 

嗯,到了該結束的時候了,更多的選項還是留待讀者自己研究發現吧....

Visual Studio 2010 C++ 屬性設定基礎

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.