/scanDependencies (모듈 종속성을 표준 형식으로 나열)

이 컴파일러 옵션은 C++ 표준 제안에 P1689R5 Format for describing dependencies of source files따라 모듈 및 헤더 단위 종속성을 나열하는 JSON 파일을 생성합니다.

구문

/scanDependencies-
/scanDependencies filename
/scanDependencies directory

인수

-
단일 대시가 제공되면 컴파일러는 원본 종속성 JSON을 stdout또는 컴파일러 출력이 리디렉션되는 위치로 내보냅니다.

filename
컴파일러는 원본 종속성 출력을 지정된 파일 이름에 씁니다. 여기에는 상대 경로 또는 절대 경로가 포함될 수 있습니다. 파일이 없는 경우 새로 만들어집니다.

directory
인수가 디렉터리인 경우 컴파일러는 지정된 디렉터리에 원본 종속성 파일을 생성합니다. 디렉터리가 있어야 하거나 인수가 .로 filename처리됩니다. 출력 파일 이름은 추가된 .module.json 확장명을 사용하여 입력 파일의 전체 이름을 기반으로 합니다. 예를 들어 컴파일러 main.cpp에 제공된 파일이 있으면 생성된 출력 파일 이름은 .입니다 main.cpp.module.json.

설명

/scanDependencies 컴파일러 옵션은 사용하는 프로젝트를 컴파일하기 전에 컴파일해야 하는 종속성, 모듈 및 헤더 단위를 식별합니다. 예를 들어 헤더 단위 종속성을 import name; 나열하거나 import "library"; 모듈 종속성으로 나열 import <library>; 합니다. CMake와 같은 빌드 도구에서 사용할 수 있는 일반적인 형식으로 이 정보를 제공하기 위한 것입니다. 모듈 및 헤더 단위 종속성을 보고하려면 사용하거나 나중에 사용하여 /std:c++20 컴파일해야 합니다.

이 명령줄 옵션은 유사 /sourceDependencies:directives 하지만 /sourceDependencies다음과 같은 방법으로 다릅니다.

  • 출력은 에 의해 /sourceDependencies:directives생성된 Microsoft 관련 스키마 대신 스키마를 사용합니다P1689R5.
  • 컴파일러와 달리 /sourceDependencies컴파일러는 컴파일된 출력을 생성하지 않습니다. 대신 파일에서 모듈 지시문을 검색합니다. 컴파일된 코드, 모듈 또는 헤더 단위가 생성되지 않습니다.
  • 출력 JSON 파일은 가져온 모듈 및 가져온 헤더 단위(.ifc 파일)를 나열하지 않습니다. 이 옵션은 프로젝트 파일만 검사하기 때문입니다. 나열할 기본 모듈 또는 헤더 단위가 없습니다.
  • 직접 가져온 모듈 또는 헤더 단위만 나열됩니다. 가져온 모듈 또는 헤더 단위 자체의 종속성은 나열되지 않습니다.
  • 옵션을 사용하여 /translateInclude 헤더 단위로 변환되지 않는 한 텍스트로 포함된 헤더 파일(예: #include <file>#include "file" 종속성으로 나열되지 않음).
  • /scanDependencies 는 파일을 빌드하기 전에 .ifc 사용해야 합니다.

/scanDependencies 는 Visual Studio 2022 버전 17.2부터 사용할 수 있습니다. 기본적으로 사용하지 않도록 설정됩니다.

(여러 프로세스를 사용하여 /MP 빌드) 컴파일러 옵션을 지정하는 경우 디렉터리 인수와 함께 사용하는 /scanDependencies 것이 좋습니다. 단일 파일 이름 인수를 제공하는 경우 컴파일러의 두 인스턴스가 출력 파일을 동시에 열어 오류를 일으킬 수 있습니다. /MP/scanDependencies- 출력을 보내기 위해 stdout 함께 사용하면 인터리브 결과가 발생할 수 있습니다.

치명적이 아닌 컴파일러 오류가 발생하면 종속성 정보가 출력 파일에 계속 기록됩니다.

모든 파일 경로는 출력에서 절대 경로로 표시됩니다.

출력 JSON 파일에 사용되는 형식 및 스키마에 대한 자세한 내용은 섹션 6을 참조하세요 P1689R5 .

예제

다음 샘플 코드를 살펴보세요.

//app.cpp:
#include <vector>

import other.module;
import std.core;

import "t.h";

import <iostream>;

int main() {}

다음 명령줄을 사용하여 종속성을 보고할 수 있습니다.app.cpp

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

컴파일러는 다음과 유사한 콘텐츠를 사용하여 JSON 파일을 output.json생성합니다.

{
    "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
                }
            ]
        }
    ]
}

보고된 경로를 축약하는 데 사용 ... 했습니다. 보고서에는 절대 경로가 포함됩니다. 보고된 경로는 컴파일러가 종속성을 찾는 위치에 따라 달라집니다. 결과가 예기치 않은 경우 프로젝트의 포함 경로 설정을 검사 수 있습니다.

.ifc 파일이 빌드되지 않았기 때문에 출력에 나열되지 않습니다. 와 달리 /sourceDependencies컴파일러는 지정된 경우 /scanDependencies 컴파일된 출력을 생성하지 않으므로 컴파일된 모듈 또는 헤더 단위를 가져올 수 없습니다.

Visual Studio에서 이 컴파일러 옵션을 설정하려면

일반적으로 Visual Studio 개발 환경에서는 /scanDependencies 이 옵션을 설정해서는 안 됩니다. 이 옵션을 설정할 때 컴파일러는 개체 파일을 생성하지 않으므로 링크 단계가 실패하고 오류가 보고됩니다.

  1. 프로젝트의 속성 페이지 대화 상자를 엽니다. 자세한 내용은 컴파일러 및 빌드 속성 설정을 참조 하세요.

  2. 구성 속성>C/C++>명령줄 속성 페이지를 선택합니다.

  3. 추가 /scanDependencies- 하거나 /scanDependencies "pathname""pathname" 출력을 위해 디렉터리를 참조할 추가 옵션 속성을 수정합니다.

  4. 확인을 선택하여 변경 내용을 저장합니다.

모듈 및 헤더 단위 종속성을 보고하려면 구성 속성>일반>C++ 언어 표준 속성도 ISO C++20 표준 이상으로 설정해야 합니다.

프로그래밍 방식으로 이 컴파일러 옵션을 설정하려면

참고 항목

MSVC 컴파일러 옵션
MSVC 컴파일러 명령줄 구문
/sourceDependencies:directives
/sourceDependencies
/std(언어 표준 버전 지정)
/translateInclude