Bagikan melalui


/sourceDependencies:directives (Mencantumkan modul dan dependensi unit header)

Opsi baris perintah ini memindai file sumber dan pernyataannya #include untuk menghasilkan file JSON yang mencantumkan ekspor dan impor modul. Informasi ini dapat digunakan oleh sistem build untuk menentukan urutan build modul dan unit header.

Opsi ini berbeda dari /sourceDependencies dengan cara berikut:

  • Pengkompilasi tidak menghasilkan output yang dikompilasi. Tidak ada kode, modul, atau unit header yang dikompilasi yang diproduksi. Sebagai gantinya, file dipindai untuk arahan modul.
  • Format JSON berbeda dari apa yang /sourceDependencies dihasilkan. Opsi /sourceDependencies ini dimaksudkan untuk digunakan dengan alat build lainnya, seperti CMake.
  • File JSON output tidak mencantumkan modul yang diimpor dan unit header (.ifc file) yang diimpor karena opsi ini melakukan pemindaian file proyek, bukan kompilasi. Jadi tidak ada modul atau unit header bawaan untuk dicantumkan.
  • Hanya modul atau unit header yang diimpor langsung yang tercantum. Ini tidak mencantumkan dependensi modul atau unit header yang diimpor itu sendiri.
  • Dependensi file header tidak tercantum. Artinya, #include <file> atau #include "file" dependensi tidak tercantum.
  • /sourceDependencies:directives dimaksudkan untuk digunakan sebelum .ifc file dibuat.
  • /sourceDependenciesmenyebabkan pengkompilasi melaporkan semua file, seperti , file, .ifc file, dan sebagainya#includes, yang digunakan untuk unit terjemahan tertentu, sedangkan /sourceDependencies:directives [file1] memindai file sumber yang ditentukan dan melaporkan semua import pernyataan dan export . .pch /sourceDependencies dapat digunakan dengan /sourceDependencies:directives.

Sintaks

/sourceDependencies:directives-
/sourceDependencies:directivesFilename
/sourceDependencies:directivesdirektori

Argumen

-
Jika tanda hubung tunggal disediakan, pengkompilasi akan memancarkan dependensi sumber JSON ke stdout, atau ke tempat output kompilator dialihkan.

filename
Pengkompilasi menulis output dependensi sumber ke nama file yang ditentukan, yang mungkin menyertakan jalur relatif atau absolut. File dibuat jika tidak ada.

directory
Jika argumen adalah direktori, pengkompilasi menghasilkan file dependensi sumber di direktori yang ditentukan. Direktori harus ada, atau argumen diperlakukan sebagai filename. Nama file output didasarkan pada nama lengkap file input, dengan ekstensi yang ditambahkan .json . Misalnya, jika file yang disediakan untuk pengkompilasi adalah main.cpp, nama file output yang dihasilkan adalah main.cpp.json.

Keterangan

/sourceDependencies:directives tersedia mulai dari Visual Studio 2019 versi 16.10.

Saat Anda menentukan /MP opsi pengkompilasi (Build dengan beberapa proses), kami sarankan Anda menggunakan /sourceDependencies:directives dengan argumen direktori. Opsi ini menjadikan output compiler sebagai file terpisah *.module.json untuk setiap file sumber. Jika Anda memberikan argumen nama file tunggal, dua instans pengompilasi dapat mencoba membuka file output secara bersamaan dan menyebabkan kesalahan. Penggunaan /MP dengan /sourceDependencies:directives- untuk mengirim output dapat stdout menyebabkan hasil yang saling terkait.

Ketika kesalahan kompilator non-fatal terjadi, informasi dependensi masih ditulis ke file output.

Semua jalur file muncul sebagai jalur absolut dalam output.

Sakelar ini dapat digunakan dengan /translateInclude.

Contoh

Mengingat kode sampel berikut:

//main.cpp:
#include <vector>

import m;
import std.core;

import <utility>;

import "t.h";

int main() {}

Baris perintah berikut ini:

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

menghasilkan file output.json JSON yang mirip dengan:

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

Untuk brevity, contoh sebelumnya menggunakan ... untuk menyingkat jalur yang dilaporkan. Laporan berisi jalur absolut. Jalur yang dilaporkan bergantung pada di mana pengkompilasi menemukan dependensi. Jika hasilnya tidak terduga, Anda mungkin ingin memeriksa pengaturan jalur sertakan proyek Anda.

ProvidedModule mencantumkan nama modul atau partisi modul yang diekspor.

Tidak ada .ifc file yang tercantum dalam output karena tidak dibuat. Tidak seperti /sourceDependencies, pengkompilasi tidak menghasilkan output yang dikompilasi ketika /sourceDependencies:directives ditentukan, sehingga tidak ada modul atau unit header yang dikompilasi yang diproduksi.

Untuk mengatur opsi pengkompilasi ini di Visual Studio

Anda biasanya tidak boleh mengatur opsi ini sendiri di lingkungan pengembangan Visual Studio. Ini diatur oleh sistem build.

Lihat juga

/translateInclude
Referensi header-units.json C++
Opsi pengkompilasi MSVC
Sintaks baris perintah pengkompilasi MSVC
/scanDependencies (Mencantumkan dependensi modul dalam bentuk standar)
/sourceDependencies (Mencantumkan semua dependensi tingkat sumber)