/sourceDependencies:directives
(列出模組和標頭單位相依性)
這個命令行選項會掃描來源檔案及其 #include
語句,以產生 JSON 檔案,以列出模組匯出和匯入。 組建系統可以使用這項資訊來判斷模組和標頭單位的建置順序。
這個選項與 /sourceDependencies
下列方式不同:
- 編譯程式不會產生已編譯的輸出。 不會產生任何已編譯的程式代碼、模組或標頭單位。 相反地,系統會掃描檔案中是否有模組指示詞。
- JSON 格式與
/sourceDependencies
產生的不同。 此選項/sourceDependencies
旨在與其他建置工具搭配使用,例如 CMake。 - 輸出 JSON 檔案不會列出匯入的模組和匯入的標頭單位(
.ifc
檔案),因為此選項會掃描項目檔,而不是編譯。 因此,沒有要列出的已建置模組或標頭單位。 - 只會列出直接匯入的模組或標頭單位。 它不會列出匯入模組或標頭單位本身的相依性。
- 頭檔相依性未列出。 也就是說,
#include <file>
或#include "file"
未列出相依性。 /sourceDependencies:directives
是要在建置檔案之前.ifc
使用。/sourceDependencies
會讓編譯程式報告用於特定轉譯單位的所有檔案,例如#includes
、檔案、.ifc
檔案等等,而/sourceDependencies:directives [file1]
會掃描指定的原始程式檔並報告所有import
和export
語句。.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++header-units.json參考
MSVC 編譯器選項
MSVC 編譯器命令列語法
/scanDependencies
(以標準形式列出模組相依性)
/sourceDependencies
(列出所有來源層級相依性)