Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Essa opção do compilador gera um arquivo JSON que lista dependências de módulo e de unidade de cabeçalho de acordo com a proposta P1689R5 Format for describing dependencies of source filespadrão do C++.
Sintaxe
/scanDependencies-
/scanDependenciesfilename
/scanDependenciesdirectory
Argumentos
-
Se o único traço for fornecido, o compilador emitirá as dependências de origem para stdoutjson ou para onde a saída do compilador é redirecionada.
filename
O compilador grava a saída de dependência de origem no nome de arquivo especificado, que pode incluir um caminho relativo ou absoluto. Se ainda não existir, o arquivo será criado.
directory
Se o argumento for um diretório, o compilador gerará arquivos de dependência de origem no diretório especificado. O diretório deve existir ou o argumento é tratado como um filename. O nome do arquivo de saída é baseado no nome completo do arquivo de entrada, com uma extensão acrescentada .module.json . Por exemplo, se o arquivo fornecido para o compilador for main.cpp, o nome do arquivo de saída gerado será main.cpp.module.json.
Observações
A /scanDependencies opção do compilador identifica quais dependências, módulos e unidades de cabeçalho devem ser compiladas antes que você possa compilar o projeto que as usa. Por exemplo, ele lista import <library>; ou import "library"; como uma dependência de unidade de cabeçalho e import name; como uma dependência de módulo. A intenção é fornecer essas informações em um formato comum consumível por ferramentas de build, como o CMake. Para relatar dependências de módulo e unidade de cabeçalho, você também deve compilar usando /std:c++20 ou posterior.
Essa opção de linha de comando é semelhante a /sourceDependencies:directives e /sourceDependencies, mas difere das seguintes maneiras:
- A saída usa o
P1689R5esquema, em vez do esquema específico da Microsoft gerado por/sourceDependencies:directives. - Diferentemente
/sourceDependencies, o compilador não produz a saída compilada. Em vez disso, os arquivos são verificados em busca de diretivas de módulo. Nenhum código compilado, módulos ou unidades de cabeçalho são produzidos. - O arquivo JSON de saída não lista módulos importados e unidades de cabeçalho importados (
.ifcarquivos) porque essa opção verifica apenas os arquivos de projeto. Não há módulos ou unidades de cabeçalho criadas para listar. - Somente módulos ou unidades de cabeçalho importados diretamente são listados. Ele não lista as dependências dos módulos importados ou das próprias unidades de cabeçalho.
- Arquivos de cabeçalho incluídos em texto, como
#include <file>ou#include "file"não, são listados como dependências, a menos que sejam convertidos em uma unidade de cabeçalho usando a opção/translateInclude. -
/scanDependenciesdeve ser usado antes.ifcque os arquivos sejam criados.
/scanDependencies está disponível a partir do Visual Studio 2022 versão 17.2. Ela não vem habilitada por padrão.
Ao especificar a opção /MP do compilador (Compilar com vários processos), recomendamos que você use /scanDependencies com um argumento de diretório. Se você fornecer um único argumento de nome de arquivo, duas instâncias do compilador poderão tentar abrir o arquivo de saída simultaneamente e causar um erro. O uso de /MP com /scanDependencies- para o qual enviar a stdout saída pode causar resultados intercalados.
Quando ocorre um erro de compilador não fatal, as informações de dependência ainda são gravadas no arquivo de saída.
Todos os caminhos de arquivo aparecem como caminhos absolutos na saída.
Para obter detalhes sobre o formato e o esquema usados no arquivo JSON de saída, consulte P1689R5 a seção 6.
Exemplos
Considere o seguinte código de exemplo:
//app.cpp:
#include <vector>
import other.module;
import std;
import "t.h";
import <iostream>;
int main() {}
Você pode usar essa linha de comando para relatar dependências em app.cpp:
cl /std:c++latest /scanDependencies output.json app.cpp
O compilador produz um arquivo JSON, output.jsoncom conteúdo semelhante a:
{
"version": 1,
"revision": 0,
"rules": [
{
"primary-output": "app.obj",
"outputs": [
"output.json"
],
"requires": [
{
"logical-name": "other.module"
},
{
"logical-name": "std"
},
{
"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
}
]
}
]
}
... Usamos para abreviar os caminhos relatados. O relatório contém os caminhos absolutos. Os caminhos relatados dependem de onde o compilador encontra as dependências. Se os resultados forem inesperados, talvez você queira verificar as configurações de caminho de inclusão do projeto.
Nenhum .ifc arquivo está listado na saída porque eles não foram criados. Ao contrário /sourceDependenciesdo compilador, o compilador não produz a saída compilada quando /scanDependencies é especificado, portanto, nenhum módulo compilado ou unidades de cabeçalho são produzidos para importação.
Para definir essa opção do compilador no Visual Studio
Normalmente, você não deve definir a opção /scanDependencies no ambiente de desenvolvimento do Visual Studio. O compilador não gera arquivos de objeto quando você define essa opção, o que faz com que a etapa de link falhe e relate um erro.
Abra a caixa de diálogo Páginas de Propriedades do projeto. Para mais informações, consulte Definir propriedades de build e do compilador.
Selecione a página de propriedades Propriedades de Configuração>C/C++>Linha de Comando.
Modifique a propriedade Opções Adicionais para adicionar
/scanDependencies-ou/scanDependencies "pathname", em que"pathname"se refere a um diretório para saída.Escolha OK para salvar suas alterações.
Para relatar dependências de módulo e unidade de cabeçalho, você também deve definir a propriedade Configuration Properties>General>C++ Language Standard como ISO C++20 Standard ou posterior.
Para definir essa opção do compilador via programação
- Consulte AdditionalOptions.
Consulte também
Importar a biblioteca padrão do C++ usando módulos
Opções do compilador MSVC
Sintaxe da linha de comando do compilador MSVC
/sourceDependencies:directives
/sourceDependencies
/std (Especificar a versão padrão do idioma)
/translateInclude