vcpkg em projetos MSBuild

Métodos de integração

Integração em todo o usuário

Para usar vcpkg em seus projetos do MSBuild, execute o seguinte comando:

vcpkg integrate install

Você só precisa executar o vcpkg integrate install comando na primeira vez que desejar habilitar a integração do MSBuild. Isso permite a integração do MSBuild para todos os seus projetos existentes e futuros.

Se você tiver várias instâncias de vcpkg, poderá usar o vcpkg integrate install comando para atualizar qual instância vcpkg é usada no MSBuild. Use vcpkg integrate remove para remover a integração de todo o usuário do MSBuild.

Esse método de integração adiciona automaticamente pacotes instalados no vcpkg às seguintes propriedades do projeto: Incluir diretórios, diretórios de link e bibliotecas de links. Além disso, isso cria uma ação pós-compilação que garante que todas as DLLs necessárias sejam copiadas para a pasta de saída da compilação. Isso funciona para todas as soluções e projetos que usam o Visual Studio 2015 ou mais recente.

Isso é tudo o que você precisa fazer para a grande maioria das bibliotecas. No entanto, algumas bibliotecas executam comportamentos conflitantes, como redefinir main()o . Como você precisa escolher por projeto qual dessas opções conflitantes você deseja, você deve adicionar manualmente essas bibliotecas às entradas do vinculador.

Aqui estão alguns exemplos em que a vinculação manual é necessária (não uma lista exaustiva):

  • Gtest fornece gtest, gmock, gtest_main, e gmock_main
  • SDL2 fornece SDL2main
  • SFML fornece sfml-main
  • Boost.Test fornece boost_test_exec_monitor

Para obter uma lista completa de todos os pacotes instalados, execute vcpkg owns manual-linko .

Importação .props e .targets

vcpkg também pode ser integrado em projetos MSBuild, importando explicitamente os scripts/buildsystems/vcpkg.props arquivos e scripts/buildsystems/vcpkg.targets para cada .vcxproj. Usando caminhos relativos, isso permite que vcpkg seja consumido por um submódulo e adquirido automaticamente pelos usuários quando eles executam git cloneo .

A maneira mais fácil de adicioná-los a cada projeto em sua solução é criar Directory.Build.props arquivos na Directory.Build.targets raiz do repositório.

Os exemplos a seguir pressupõem que eles estão na raiz do repositório com um submódulo de microsoft/vcpkg at vcpkg.

Exemplo Directory.Build.props

<Project>
 <Import Project="$(MSBuildThisFileDirectory)vcpkg\scripts\buildsystems\msbuild\vcpkg.props" />
</Project>

Exemplo Directory.Build.targets

<Project>
 <Import Project="$(MSBuildThisFileDirectory)vcpkg\scripts\buildsystems\msbuild\vcpkg.targets" />
</Project>

Consulte a seção Personalizar sua compilação da documentação oficial do MSBuild para obter mais informações sobre Directory.Build.targets e Directory.Build.props.

Pacote NuGet vinculado

Observação

Essa abordagem não é recomendada para novos projetos, pois dificulta o compartilhamento com outras pessoas. Para obter um pacote NuGet portátil e independente, consulte o export command.

Os projetos VS também podem ser integrados por meio de um pacote NuGet. Isso modificará o arquivo de projeto, portanto, não recomendamos essa abordagem para projetos de código aberto.

PS D:\src\vcpkg> .\vcpkg integrate project
Created nupkg: D:\src\vcpkg\scripts\buildsystems\vcpkg.D.src.vcpkg.1.0.0.nupkg

With a project open, go to Tools->NuGet Package Manager->Package Manager Console and paste:
    Install-Package vcpkg.D.src.vcpkg -Source "D:/src/vcpkg/scripts/buildsystems"

Observação

O pacote NuGet gerado não contém as bibliotecas reais. Em vez disso, ele age como um atalho (ou link simbólico) para a instalação do vcpkg e será atualizado "automaticamente" com quaisquer alterações (instalar/remover) nas bibliotecas. Você não precisa regenerar ou atualizar o pacote NuGet.

Configuração de Domínio

VcpkgEnabled (Use Vcpkg)

Isso pode ser definido como "false" para desabilitar explicitamente a integração vcpkg para o projeto

VcpkgConfiguration (Configuração Vcpkg)

Se seus nomes de configuração forem muito complexos para vcpkg adivinhar corretamente, você poderá atribuir essa propriedade ou ReleaseDebug dizer explicitamente a vcpkg qual variante de bibliotecas você deseja consumir.

VcpkgEnableManifest (Use manifesto Vcpkg)

Essa propriedade deve ser definida como true para consumir de um arquivo local vcpkg.json . Se definido como false, todos os arquivos locais vcpkg.json serão ignorados.

Atualmente, o padrão é false, mas será padrão no true futuro.

VcpkgTriplet (Trigêmeo)

Essa propriedade controla o triplete do qual consumir bibliotecas, como x64-windows-static ou arm64-windows.

Se isso não for definido explicitamente, vcpkg deduzirá o triplet correto com base em suas configurações do Visual Studio. vcpkg só deduzirá trigêmeos que usam ligação dinâmica de biblioteca e ligação CRT dinâmica; se você quiser dependências estáticas ou usar o CRT estático (/MT), você precisará definir o triplet manualmente.

Você pode ver o triplete deduzido automaticamente definindo o detalhamento do MSBuild como Normal ou superior:

Atalho: Ctrl+Q "construir e executar"

Ferramentas -> Opções -> Projetos e Soluções -> Construir e Executar -> MSBuild projeto build output verbosity

Veja também Trigêmeos

VcpkgHostTriplet (Anfitrião Triplet)

Isso pode ser definido como um triplete personalizado a ser usado para resolver dependências de host.

Se não estiver configurado, o padrão será o triplete "nativo" (x64-windows).

Consulte também Dependências do host.

VcpkgInstalledDir (Diretório instalado)

Essa propriedade define o local do qual o vcpkg instalará e consumirá bibliotecas.

No modo de manifesto, o padrão é $(VcpkgManifestRoot)\vcpkg_installed\$(VcpkgTriplet)\. No modo clássico, o padrão é $(VcpkgRoot)\installed\.

VcpkgApplocalDeps (DLLs de implantação local do aplicativo)

Essa propriedade habilita ou desabilita a detecção e a cópia de DLLs dependentes da árvore instalada vcpkg para o diretório de saída do projeto.

VcpkgXUseBuiltInApplocalDeps (Use a implantação local do aplicativo interno)

Essa propriedade, quando habilitada, usa a implementação de implantação de DLL local de aplicativo interna experimental do vcpkg ao implantar DLLs localmente no aplicativo. Essa propriedade será removida e não terá efeito quando a implementação interna não for mais experimental.

Essa propriedade não tem efeito quando $(VcpkgApplocalDeps) é false.

Configuração do modo manifesto

Para usar manifestos (vcpkg.json) com o MSBuild, primeiro você precisa usar um dos métodos de integração acima. Em seguida, adicione um vcpkg.json acima do arquivo de projeto (como na raiz do repositório de origem) e defina a propriedade VcpkgEnableManifest como true. Você pode definir essa propriedade por meio do IDE em Propriedades>do projeto Vcpkg>Use Vcpkg Manifest. Talvez seja necessário recarregar o IDE para ver a página de propriedades vcpkg.

vcpkg será executado durante a compilação do seu projeto e instalará todas as dependências listadas ao vcpkg_installed/$(VcpkgTriplet)/ lado do vcpkg.json arquivo, essas bibliotecas serão automaticamente incluídas e vinculadas aos seus projetos do MSBuild.

Problemas conhecidos

  • O Visual Studio 2015 não controla corretamente as edições nos vcpkg.json arquivos e vcpkg-configuration.json e não responderá às alterações, a menos que um .cpp seja editado.

VcpkgAdditionalInstallOptions (Opções adicionais)

Ao usar um manifesto, essa opção especifica sinalizadores de linha de comando adicionais a serem passados para a chamada de ferramenta vcpkg subjacente. Isso pode ser usado para acessar recursos que ainda não foram expostos por meio de outra opção.

VcpkgManifestInstall (Instalar dependências do Vcpkg)

Essa propriedade pode ser definida para false desabilitar a restauração automática de dependência durante a compilação do projeto. As dependências devem ser restauradas manualmente por meio da linha de comando vcpkg separadamente.