Aracılığıyla paylaş


/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 filesgöre modül ve üst bilgi birimi bağımlılıklarını listeleyen bir JSON dosyası oluşturur.

Sözdizimi

/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 stdoutveya 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 filenamedeğ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 /sourceDependenciesile /sourceDependencies:directives benzerdir, ancak aşağıdaki yollarla farklılık gösterir:

  • Çıktı, tarafından /sourceDependencies:directivesoluş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.cppraporlamak için bu komut satırını kullanabilirsiniz:

cl /std:c++latest /scanDependencies output.json app.cpp

Derleyici, output.jsonaş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.

  1. Projenin Özellik Sayfaları iletişim kutusunu açın. Daha fazla bilgi için bkz . Derleyici ve derleme özelliklerini ayarlama.

  2. Yapılandırma Özellikleri>C/C++>Komut Satırı özellik sayfasını seçin.

  3. Veya eklemek /scanDependencies-/scanDependencies "pathname"için Ek Seçenekler özelliğini değiştirin; burada "pathname" çıktı için bir dizine başvurur.

  4. 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

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