/scanDependencies
(Mencantumkan dependensi modul dalam bentuk standar)
Opsi kompilator ini menghasilkan file JSON yang mencantumkan dependensi modul dan header-unit sesuai dengan proposal P1689R5 Format for describing dependencies of source files
Standar C++ .
Sintaks
/scanDependencies-
/scanDependencies
filename
/scanDependencies
directory
Argumen
-
Jika tanda hubung tunggal disediakan, pengkompilasi 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 .module.json
. Misalnya, jika file yang disediakan untuk pengkompilasi adalah main.cpp
, nama file output yang dihasilkan adalah main.cpp.module.json
.
Keterangan
Opsi /scanDependencies
kompilator mengidentifikasi dependensi, modul, dan unit header mana yang harus dikompilasi sebelum Anda dapat mengkompilasi proyek yang menggunakannya. Misalnya, daftar import <library>;
atau import "library";
sebagai dependensi unit header, dan import name;
sebagai dependensi modul. Tujuannya adalah untuk memberikan informasi ini dalam format umum yang dapat dikonsumsi oleh alat build seperti CMake. Untuk melaporkan dependensi modul dan unit header, Anda juga harus mengkompilasi dengan menggunakan /std:c++20
atau yang lebih baru.
Opsi baris perintah ini mirip /sourceDependencies:directives
dengan dan /sourceDependencies
, tetapi berbeda dengan cara berikut:
- Output menggunakan
P1689R5
skema, alih-alih skema khusus Microsoft yang dihasilkan oleh/sourceDependencies:directives
. - Tidak seperti
/sourceDependencies
, pengkompilasi tidak menghasilkan output yang dikompilasi. Sebagai gantinya, file dipindai untuk arahan modul. Tidak ada kode, modul, atau unit header yang dikompilasi yang diproduksi. - File JSON output tidak mencantumkan modul yang diimpor dan unit header (
.ifc
file) yang diimpor karena opsi ini hanya memindai file proyek. 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.
- File header yang disertakan secara tekstual seperti
#include <file>
atau#include "file"
tidak tercantum sebagai dependensi kecuali diterjemahkan ke unit header dengan menggunakan/translateInclude
opsi . /scanDependencies
dimaksudkan untuk digunakan sebelum.ifc
file dibuat.
/scanDependencies
tersedia mulai dari Visual Studio 2022 versi 17.2. Perlindungan pembersihan tidak diaktifkan secara default.
Saat Anda menentukan /MP
opsi pengkompilasi (Build dengan beberapa proses), kami sarankan Anda menggunakan /scanDependencies
dengan argumen direktori. Jika Anda memberikan argumen nama file tunggal, dua instans pengompilasi dapat mencoba membuka file output secara bersamaan dan menyebabkan kesalahan. Penggunaan /MP
dengan /scanDependencies-
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.
Untuk detail tentang format dan skema yang digunakan dalam file JSON output, lihat P1689R5
bagian 6.
Contoh
Pertimbangkan kode sampel berikut:
//app.cpp:
#include <vector>
import other.module;
import std.core;
import "t.h";
import <iostream>;
int main() {}
Anda dapat menggunakan baris perintah ini untuk melaporkan dependensi di app.cpp
:
cl /std:c++latest /scanDependencies output.json app.cpp
Pengkompilasi menghasilkan file JSON, output.json
, dengan konten yang mirip dengan:
{
"version": 1,
"revision": 0,
"rules": [
{
"primary-output": "app.obj",
"outputs": [
"C:\\Users\\username\\source\\repos\\app\\app"
],
"requires": [
{
"logical-name": "other.module"
},
{
"logical-name": "std.core"
},
{
"logical-name": "t.h",
"source-path": "C:\\Users\\username\\source\\repos\\app\\app\\t.h",
"lookup-method": "include-quote",
"unique-on-source-path": true
},
{
"logical-name": "iostream",
"source-path": "C:\\Program Files\\...\\include\\iostream",
"lookup-method": "include-angle",
"unique-on-source-path": true
}
]
}
]
}
Kami telah 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.
Tidak ada .ifc
file yang tercantum dalam output karena tidak dibuat. Tidak seperti /sourceDependencies
, kompilator tidak menghasilkan output yang dikompilasi ketika /scanDependencies
ditentukan, sehingga tidak ada modul atau unit header yang dikompilasi yang diproduksi untuk diimpor.
Untuk mengatur opsi pengkompilasi ini di Visual Studio
Anda biasanya tidak boleh mengatur /scanDependencies
opsi di lingkungan pengembangan Visual Studio. Pengkompilasi tidak menghasilkan file objek saat Anda mengatur opsi ini, yang membuat langkah tautan gagal dan melaporkan kesalahan.
Buka kotak dialog Halaman Properti proyek. Untuk informasi selengkapnya, lihat Mengatur properti kompilator dan build.
Pilih halaman properti Properti>Konfigurasi C/C++>Baris Perintah.
Ubah properti Opsi Tambahan untuk menambahkan
/scanDependencies-
atau/scanDependencies "pathname"
, di mana"pathname"
merujuk ke direktori untuk output.Pilih OK untuk menyimpan perubahan.
Untuk melaporkan dependensi modul dan unit header, Anda juga harus mengatur properti Properti>Konfigurasi Umum>C++ Standar Bahasa ke ISO C++20 Standar atau yang lebih baru.
Untuk mengatur opsi pengkompilasi ini secara terprogram
- Lihat AdditionalOptions.
Lihat juga
Opsi pengkompilasi MSVC
Sintaks baris perintah pengkompilasi MSVC
/sourceDependencies:directives
/sourceDependencies
/std
(Tentukan versi standar bahasa)
/translateInclude