共用方式為


/sourceDependencies:directives (列出模組和標頭單位相依性)

這個命令列選項會掃描來源檔案及其 #include 語句,以產生 JSON 檔案,以列出模組匯出和匯入。 組建系統可以使用這項資訊來判斷模組和標頭單位的建置順序。

此選項與 /sourceDependencies 下列方式不同:

  • 編譯器不會產生已編譯的輸出。 不會產生任何已編譯的程式碼、模組或標頭單位。 相反地,系統會掃描檔案中是否有模組指示詞。
  • JSON 格式與 /sourceDependencies 產生的不同。 此選項 /sourceDependencies 旨在與其他建置工具搭配使用,例如 CMake。
  • 輸出 JSON 檔案不會列出匯入的模組和匯入的標頭單位( .ifc 檔案),因為此選項會掃描專案檔,而不是編譯。 因此,沒有要列出的已建置模組或標頭單位。
  • 只會列出直接匯入的模組或標頭單位。 它不會列出匯入模組或標頭單位本身的相依性。
  • 標頭檔相依性未列出。 也就是說, #include <file>#include "file" 未列出相依性。
  • /sourceDependencies:directives 是要在建置檔案之前 .ifc 使用。
  • /sourceDependencies會讓編譯器報告用於特定轉譯單位的所有檔案,例如 #includes 、檔案、 .ifc 檔案等等,而 /sourceDependencies:directives [file1] 會掃描指定的原始程式檔並報告所有 importexport 語句。 .pch /sourceDependencies 可以搭配 /sourceDependencies:directives 使用。

語法

/sourceDependencies:directives-
/sourceDependencies:directives檔案名稱
/sourceDependencies:directives目錄

引數

-
如果提供單一破折號,則編譯器會將來源相依性 JSON 發出至 stdout ,或重新導向編譯器輸出的位置。

filename
編譯器會將來源相依性輸出寫入指定的檔案名,其中可能包含相對或絕對路徑。 如果檔案不存在,就會建立檔案。

directory
如果引數是目錄,編譯器會在指定的目錄中產生來源相依性檔案。 目錄必須存在,否則引數會 filename 被視為 。 輸出檔案名是以輸入檔的完整名稱為基礎,副檔名為附加 .json 。 例如,如果提供給編譯器的檔案是 main.cpp ,產生的輸出檔名是 main.cpp.json

備註

/sourceDependencies:directives 從 Visual Studio 2019 16.10 版開始提供。

當您指定 /MP [使用多個進程建置] 編譯器選項時,建議您搭配目錄引數使用 /sourceDependencies:directives 。 此選項可讓編譯器為每個來源檔案輸出個別 *.module.json 的檔案。 如果您提供單一檔案名引數,編譯器的兩個實例可能會嘗試同時開啟輸出檔案,並造成錯誤。 使用 搭配 /MP/sourceDependencies:directives- 將輸出傳送至 stdout 可能會導致交錯的結果。

發生非嚴重編譯器錯誤時,相依性資訊仍會寫入輸出檔案。

所有檔案路徑都會顯示為輸出中的絕對路徑。

這個參數可以搭配 /translateInclude 使用。

範例

假設有下列範例程式碼:

//main.cpp:
#include <vector>

import m;
import std.core;

import <utility>;

import "t.h";

int main() {}

下列命令列:

cl /std:c++latest /translateInclude /sourceDependencies:directives output.json main.cpp

會產生類似下列的 JSON 檔案 output.json

{
   "Version":"1.1",
   "Data":{
      "Source":"C:\\a\\b\\main.cpp",
      "ProvidedModule":"",
      "ImportedModules":[
         "m",
         "std.core"
      ],
      "ImportedHeaderUnits":[
         "C:\\...\\utility",
         "C:\\a\\b\\t.h"
      ]
   }
}

為了簡潔起見,上一個範例會使用 ... 來縮寫報告的路徑。 報表包含絕對路徑。 報告的路徑取決於編譯器找到相依性的位置。 如果結果非預期,您可能會想要檢查項目的 Include 路徑設定。

ProvidedModule 列出匯出的模組或模組資料分割名稱。

輸出中未列出任何 .ifc 檔案,因為它們未建置。 不同于 /sourceDependencies ,編譯器不會在指定時 /sourceDependencies:directives 產生已編譯的輸出,因此不會產生任何已編譯的模組或標頭單位。

在 Visual Studio 中設定這個編譯器選項

您通常不應該在 Visual Studio 開發環境中自行設定此選項。 它是由建置系統所設定。

另請參閱

/translateInclude
C++ 標頭 units.json 參考
MSVC 編譯器選項
MSVC 編譯器命令列語法
/scanDependencies (以標準形式列出模組相依性)
/sourceDependencies (列出所有來源層級相依性)