Поделиться через


/sourceDependencies:directives (Перечисление зависимостей модуля и блока заголовка)

Этот параметр командной строки сканирует исходные файлы и их #include инструкции, чтобы создать JSON-файл, который перечисляет экспорт модуля и импорт. Эти сведения можно использовать системой сборки для определения порядка сборки модулей и единиц заголовков.

Этот параметр отличается от /sourceDependencies следующих способов:

  • Компилятор не создает скомпилированные выходные данные. Не создаются скомпилированные коды, модули или блоки заголовков. Вместо этого файлы сканируются для директив модуля.
  • Формат JSON отличается от того, что /sourceDependencies создает. Этот /sourceDependencies параметр предназначен для использования с другими средствами сборки, такими как CMake.
  • Выходной JSON-файл не перечисляет импортированные модули и импортированные блоки заголовков (.ifc файлы), так как этот параметр выполняет сканирование файлов проекта, а не компиляцию. Поэтому в списке нет встроенных модулей или блоков заголовков.
  • Перечислены только импортированные модули или блоки заголовков. Он не перечисляет зависимости импортированных модулей или блоков заголовков.
  • Зависимости файла заголовка не перечислены. То есть #include <file> #include "file" или зависимости не перечислены.
  • /sourceDependencies:directives Предназначено для использования перед .ifc созданием файлов.
  • /sourceDependenciesКомпилятор отправляет отчет обо всех файлах, таких как #includes.pch файлы, файлы, .ifc файлы и т. д., которые использовались для определенной единицы перевода, в то время /sourceDependencies:directives [file1] как сканирует указанный исходный файл и сообщает все import инструкции и export инструкции. /sourceDependencies можно использовать с /sourceDependencies:directives.

Синтаксис

/sourceDependencies:directives-
/sourceDependencies:directives имя_файла
/sourceDependencies:directives каталог

Аргументы

-
Если задано однотирное тире, компилятор выдает исходные зависимости JSON stdoutв или в место перенаправления выходных данных компилятора.

filename
Компилятор записывает выходные данные зависимостей источника в указанное имя файла, которое может включать относительный или абсолютный путь. Если файл не существует, он создается.

directory
Если аргумент является каталогом, компилятор создает исходные файлы зависимостей в указанном каталоге. Каталог должен существовать, или аргумент рассматривается как .filename Имя выходного файла основано на полном имени входного файла с добавленным .json расширением. Например, если файл, предоставленный компилятору, имеется main.cppимя созданного выходного файла main.cpp.json.

Замечания

/sourceDependencies:directives доступна начиная с Visual Studio 2019 версии 16.10.

При указании /MP параметра компилятора (сборка с несколькими процессами) рекомендуется использовать /sourceDependencies:directives с аргументом каталога. Этот параметр позволяет компилятору выводить отдельный *.module.json файл для каждого исходного файла. Если указать один аргумент имени файла, два экземпляра компилятора могут одновременно попытаться открыть выходной файл и вызвать ошибку. Использование с /sourceDependencies:directives- отправкой выходных /MP данных, чтобы привести к stdout переключениям результатов.

При возникновении ошибки компилятора, неустранимая, сведения о зависимости по-прежнему записываются в выходной файл.

Все пути к файлам отображаются как абсолютные пути в выходных данных.

Этот параметр можно использовать с /translateInclude.

Примеры

Учитывая следующий пример кода:

//main.cpp:
#include <vector>

import m;
import std.core;

import <utility>;

import "t.h";

int main() {}

Следующая командная строка:

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

создает JSON-файл output.json , аналогичный следующему:

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

Для краткости предыдущий пример используется ... для сокращения указанных путей. Отчет содержит абсолютные пути. Пути, сообщаемые в зависимости от того, где компилятор находит зависимости. Если результаты непредвиденно, может потребоваться проверить параметры пути проекта.

ProvidedModule перечисляет экспортированные имена модулей или секций модуля.

В .ifc выходных данных нет файлов, так как они не были созданы. В отличие /sourceDependenciesот того, компилятор не создает скомпилированные выходные данные при /sourceDependencies:directives указании, поэтому не создаются скомпилированные модули или блоки заголовков.

Установка параметра компилятора в Visual Studio

Обычно этот параметр не следует задавать самостоятельно в среде разработки Visual Studio. Он устанавливается системой сборки.

См. также

/translateInclude
Справочник по header-units.json C++
Параметры компилятора MSVC
Синтаксис командной строки компилятора MSVC
/scanDependencies (Перечисление зависимостей модуля в стандартной форме)
/sourceDependencies (Перечисление всех зависимостей уровня источника)