/scanDependencies
(Modül bağımlılıklarını standart biçimde listeleme)
Bu derleyici seçeneği, C++ Standart teklifine P1689R5 Format for describing dependencies of source files
göre modül ve üst bilgi birimi bağımlılıklarını listeleyen bir JSON dosyası oluşturur.
Söz dizimi
/scanDependencies-
/scanDependencies
filename
/scanDependencies
directory
Bağımsız değişkenler
-
Tek tire sağlanırsa, derleyici kaynak bağımlılıklarını JSON'a stdout
veya derleyici çıktısının yeniden yönlendirildiği yere yayar.
filename
Derleyici, kaynak bağımlılık çıkışını, göreli veya mutlak bir yol içerebilen belirtilen dosya adına yazar. Dosya yoksa oluşturulur.
directory
Bağımsız değişken bir dizinse, derleyici belirtilen dizinde kaynak bağımlılık dosyaları oluşturur. Dizinin mevcut olması gerekir veya bağımsız değişkeni olarak filename
değerlendirilir. Çıkış dosyası adı, eklenen .module.json
uzantıyla birlikte giriş dosyasının tam adını temel alır. Örneğin, derleyiciye sağlanan dosya ise main.cpp
, oluşturulan çıkış dosya adı olur main.cpp.module.json
.
Açıklamalar
Derleyici /scanDependencies
seçeneği, bunları kullanan projeyi derleyemeden önce hangi bağımlılıkların, modüllerin ve üst bilgi birimlerinin derlenmiş olması gerektiğini belirler. Örneğin, veya import "library";
üst bilgi birimi bağımlılığı olarak ve import name;
modül bağımlılığı olarak listelenirimport <library>;
. Amaç, bu bilgileri CMake gibi derleme araçları tarafından kullanılabilen ortak bir biçimde sağlamaktır. Modül ve üst bilgi birimi bağımlılıklarını raporlamak için veya daha sonra kullanarak /std:c++20
da derlemeniz gerekir.
Bu komut satırı seçeneği ve /sourceDependencies
ile /sourceDependencies:directives
benzerdir, ancak aşağıdaki yollarla farklılık gösterir:
- Çıktı, tarafından
/sourceDependencies:directives
oluşturulan Microsoft'a özgü şema yerine şemayı kullanırP1689R5
. - 'nin aksine
/sourceDependencies
, derleyici derlenmiş çıkış üretmez. Bunun yerine, dosyalar modül yönergeleri için taranır. Derlenmiş kod, modül veya üst bilgi birimi üretilmemiştir. - Bu seçenek yalnızca proje dosyalarını taradığından çıkış JSON dosyası içeri aktarılan modülleri ve içeri aktarılan üst bilgi birimlerini (
.ifc
dosyaları) listelemez. Listelenmesini istediğiniz yerleşik modül veya üst bilgi birimi yok. - Yalnızca doğrudan içeri aktarılan modüller veya üst bilgi birimleri listelenir. İçeri aktarılan modüllerin veya üst bilgi birimlerinin bağımlılıklarını listelemez.
- veya gibi metinsel olarak
#include <file>
#include "file"
eklenen üst bilgi dosyaları, seçeneği kullanılarak/translateInclude
bir üst bilgi birimine çevrilmediği sürece bağımlılık olarak listelenmez. /scanDependencies
dosyalar oluşturulmadan önce.ifc
kullanılması amaçlanır.
/scanDependencies
, Visual Studio 2022 sürüm 17.2'den itibaren kullanılabilir. Varsayılan olarak etkin değildir.
(Birden çok işlemle derleme) derleyici seçeneğini belirttiğinizde /MP
, bir dizin bağımsız değişkeniyle kullanmanızı /scanDependencies
öneririz. Tek bir dosya adı bağımsız değişkeni sağlarsanız, derleyicinin iki örneği çıkış dosyasını aynı anda açmaya çalışabilir ve hataya neden olabilir. /MP
'a çıkış göndermek için stdout
ile /scanDependencies-
kullanılması, araya kaydedilen sonuçlara neden olabilir.
Önemli olmayan bir derleyici hatası oluştuğunda, bağımlılık bilgileri yine de çıkış dosyasına yazılır.
Tüm dosya yolları çıkışta mutlak yollar olarak görünür.
Çıktı JSON dosyasında kullanılan biçim ve şema hakkında ayrıntılı bilgi için 6. bölüme bakın P1689R5
.
Örnekler
Aşağıdaki örnek kodu göz önünde bulundurun:
//app.cpp:
#include <vector>
import other.module;
import std.core;
import "t.h";
import <iostream>;
int main() {}
içindeki bağımlılıkları app.cpp
raporlamak için bu komut satırını kullanabilirsiniz:
cl /std:c++latest /scanDependencies output.json app.cpp
Derleyici, output.json
aşağıdakine benzer içeriğe sahip bir JSON dosyası oluşturur:
{
"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
}
]
}
]
}
Bildirilen yolları kısaltmak için kullandık ...
. Rapor mutlak yolları içerir. Bildirilen yollar, derleyicinin bağımlılıkları nerede bulduğuna bağlıdır. Sonuçlar beklenmedikse, projenizin ekleme yolu ayarlarını denetlemek isteyebilirsiniz.
Oluşturulmadıkları .ifc
için çıkışta hiçbir dosya listelenmez. 'den farklı olarak /sourceDependencies
, derleyici belirtildiğinde /scanDependencies
derlenmiş çıkış üretmez, bu nedenle içeri aktarmak için derlenmiş modüller veya üst bilgi birimleri üretilmez.
Visual Studio'da bu derleyici seçeneğini ayarlamak için
Normalde Visual Studio geliştirme ortamında bu seçeneği ayarlamamalısınız /scanDependencies
. Bu seçeneği ayarladığınızda derleyici nesne dosyaları oluşturmaz ve bu da bağlantı adımının başarısız olmasına ve hata bildirmesine neden olur.
Projenin Özellik Sayfaları iletişim kutusunu açın. Daha fazla bilgi için bkz . Derleyici ve derleme özelliklerini ayarlama.
Yapılandırma Özellikleri>C/C++>Komut Satırı özellik sayfasını seçin.
Veya eklemek
/scanDependencies-
/scanDependencies "pathname"
için Ek Seçenekler özelliğini değiştirin; burada"pathname"
çıktı için bir dizine başvurur.Değişikliklerinizi kaydetmek için Tamam'ı seçin.
Modül ve üst bilgi birimi bağımlılıklarını raporlamak için Yapılandırma Özellikleri>Genel>C++ Dil Standardı özelliğini DE ISO C++20 Standart veya üzeri olarak ayarlamanız gerekir.
Bu derleyici seçeneğini program üzerinden ayarlamak için
- Bkz. AdditionalOptions.
Ayrıca bkz.
MSVC derleyici seçenekleri
MSVC derleyicisi komut satırı söz dizimi
/sourceDependencies:directives
/sourceDependencies
/std
(Dil standart sürümünü belirtin)
/translateInclude