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
, egmock_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-link
o .
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 clone
o .
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 Release
Debug
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 evcpkg-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.