簡體   English   中英

如何在 Visual Studio 中包含子目錄?

[英]How to include sub-directories in Visual Studio?

我必須包含許多頭文件,它們位於不同的子目錄中。 在 Visual Studio(我使用的是 2005 版)中是否有一種方法可以設置一個包含路徑,Visual Studio 還將在子目錄中搜索頭文件?

從設計的角度來看,在 Visual Studio 設置中設置文件夾搜索路徑來修復包含問題通常不是一個好主意。 您的代碼在具有不同目錄布局的不同機器上的可移植性較差。

我的建議是確定代碼的組織方式,以便固定子目錄的相對路徑(相對於包含的代碼):

  • 將“基本文件夾”添加到項目中(項目屬性 -> 配置屬性 -> C/C++ -> 附加包含目錄,“附加包含目錄”
  • 將子目錄添加到 #include 語句,即#include "subdirectory/somefile.h"

這有一個額外的好處,即能夠查看解決方案中的哪個文件夾包含該文件 - 當您試圖找到自己的方法或試圖找出文件的用途時,這通常是有用的信息。

我們還沒有找到在 Visual Studio 中設置遞歸文件夾搜索的方法(盡管 Xcode 設置和使用它們沒有問題)。 我們所做的是列出文件中的所有目錄,並在 C/C++ 命令行附加選項中指定該文件:

@"包含文件夾.rsp"

我們很少使用遞歸搜索發現問題,盡管偶然包含“/”確實會減慢速度。

我發現在大多數情況下,包括在 MSVC 中,我可以通過使用 SUBST 命令的一點技巧來縮短路徑長度。 我將展示縮短默認繼承的 C++ 包含路徑的示例,但您將對與項目相關的包含路徑執行此操作。 首先創建一個或多個這樣的批處理文件(並從 Windows 資源管理器或命令行運行它們):

MDrive.bat:
subst M: /D
subst M: "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC"

WDrive.bat:
subst W: /D
subst W: "C:\Program Files (x86)\Windows Kits\8.1\Include"

... This is just and example.  You would do this for your
    project related include directories.

您可以為更長的路徑創建許多這樣的路徑。 在上述情況下,我只是縮短了 MSVC 默認使用的標准繼承路徑。 順便說一句,Subst 命令在沒有管理權限的情況下工作,但不要踩到現有的物理或映射驅動器號(我不確定會發生什么——我現在不想測試它)。

此步驟是可選的。 我在 MSVS 2010+ 中添加了一個自定義屬性表。 順便說一句,如果你不知道自定義屬性表,你應該知道。 請參閱屬性頁 (Visual C++) VIEW-Other Windows-Property Window ,右鍵單擊 Property manager 中的項目, Add a New Project Properties Sheet User Macros 下,添加一個宏,例如MyProjectIncludePaths並將值(在本例中)設置為

M:; M:\atlmfc\include; W:\um; W:\shared; W:\winrt

--在這個例子中只有49個字符,比默認的短得多

$(VC_IncludePath); $(WindowsSKD_IncludePath)

這在宏擴展時轉化為

C:\Program Files (x86)\Windows Kits\8.1\Include;C:\Program Files (x86)\Windows Kits\8.1\Include\atlmfc\include;C:\Program Files (x86)\Windows Kits\8.1\Include\um;C:\Program Files (x86)\Windows Kits\8.1\Include\shared;C:\Program Files (x86)\Windows Kits\8.1\Include\winrt

根據我的統計,默認值是 270 個字符——即超過 260 個字符——誰能解釋一下?

項目的屬性頁(即不是自定義屬性表)中,在我的示例中,我轉到Configuration Properties-VC++ Directories並將Include Directories值更改為$(MyProjectIncludePaths) ,但實際上你會去(在你的自定義屬性表頁面(如果您創建了一個) C/C++-General並將$(MyProjectIncludePaths)添加到Additional Include Directories

除了繼承的 270 個字符路徑之外,我還能夠在Additional Include Directories下添加一些合理長度的路徑。 也許附加包含目錄有自己的長度限制 (?)。

我相信使用遞歸搜索包含文件會導致比以錯誤文件或錯誤版本包含的形式解決的問題更多。 畢竟,您必須在設置項目時定義一次正確的目錄。

在包含路徑中使用它來包含所有子目錄

${workspaceFolder}
${workspaceFolder}/**

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM