Visão geral de MSBuild (Visual C++)
O MSBuild é o sistema de compilação padrão para projetos do Visual C++. Quando você cria um projeto no ambiente de desenvolvimento integrado Visual Studio (IDE), use a ferramenta de msbuild.exe, um arquivo de projeto baseado em XML, e arquivos opcionais de configurações. Embora você possa usar o msbuild.exe e um arquivo de projeto na linha de comando, a IDE fornece uma interface de usuário para que você possa configurar mais facilmente as configurações e compilar um projeto. Esta visão geral descreve como o Visual C++ usa o sistema MSBuild.
Pré-requisitos
Leia os documentos a seguir sobre o MSBuild.
MSBuild
Visão geral dos conceitos de MSBuild.Referência do MSBuild
Informações de referência sobre o sistema MSBuild.Referência do esquema de arquivos de projeto do MSBuild
Lista os elementos do Esquema XML do MSBuild, juntamente com seus atributos e elementos pai e filho. Observe especialmente os elementos ItemGroup, PropertyGroup, Destino e Tarefa .Referência de linha de comando MSBuild
Descreve os argumentos de linha de comando e as opções que você pode usar com o msbuild.exe.Referência das tarefas do MSBuild
Descreve tarefas do MSBuild. Observe especialmente estas tarefas, que são específicas do Visual C++: Tarefa BscMake, Tarefa CL, Tarefa CPPClean, Tarefa LIB, Tarefa Link, Tarefa MIDL, Tarefa MT, Tarefa RC, Tarefa SetEnv, Tarefa VCMessage, Tarefa XDCMake, Tarefa XSD.
MSBuild na linha de comando
A instrução a seguir do documento Referência de linha de comando MSBuild ilustra que a ferramenta msbuild.exe obtém um argumento explícito ou implícito de project file (um arquivo .vcxproj para projetos do Visual C++) e zero ou mais options de linha de comando.
msbuild.exe [project file] [options]
Use /target (ou /t) e opções de linha de comando /property (ou /p) para substituir as propriedades e os destinos que são especificadas no arquivo de projeto.
Uma função essencial do arquivo de projeto é especificar um destino, que é uma operação específica aplicada ao seu projeto, e as entradas e saídas que são necessárias para executar a operação. Um arquivo de projeto pode especificar um ou vários destinos, que podem incluir um destino padrão.
Cada destino consiste em uma sequência de uma ou mais tarefas. Cada tarefa é representada por uma classe .NET Framework que contém um comando executável. Por exemplo, Tarefa de CL contém o comando cl.exe.
Um parâmetro de tarefa é uma propriedade de tarefa de classe e representa normalmente uma opção de linha de comando do comando executável. Por exemplo, o parâmetro FavorSizeOrSpeed da tarefa CL corresponde às opções de compilador /Os e de /Ot.
Os parâmetros adicionais de tarefa oferecem suporte à infraestrutura do MSBuild. Por exemplo, o parâmetro de tarefa Sources especifica um conjunto de tarefas que podem ser consumidas por outras tarefas. Para obter mais informações sobre tarefas do MSBuild, consulte Referência das tarefas do MSBuild.
A maioria das tarefas exige entradas e saídas, como nomes de arquivo, caminhos e parâmetros de cadeia de caracteres, numéricos ou Boolianos. Por exemplo, uma entrada comum é o nome de um arquivo de origem .cpp para compilação. Um parâmetro de entrada importante é uma cadeia de caracteres que especifica a configuração e a plataforma de compilação, por exemplo, "Debug|Win32". Entradas e saídas são especificadas por um ou mais elementos XML definidos pelo usuário Item contidos em um elemento ItemGroup .
Um arquivo de projeto também pode especificar as propriedades definidas pelo usuário e os itens do grupo de definição de itens. As propriedades e os itens formam pares nome/valor que podem ser usados como variáveis na compilação. O componente name de um par define uma macro, e o componente value declara valor da macro. Uma macro de propriedade é acessada usando a notação $ (name), e uma macro de item é acessada usando a notação % (name).
Outros elementos XML em um arquivo de projeto podem testar macros e, em seguida, definir condicionalmente o valor de qualquer macro ou controlar a execução da compilação. Os nomes de macro e as cadeias de caracteres literais podem ser concatenados para gerar construções como um caminho e um nome de arquivo. Na linha de comando, a opção /property define ou substitui uma propriedade de projeto. Os itens não podem ser referenciados na linha de comando.
O sistema MSBuild pode executar condicional um destino antes ou depois de outro destino. Além disso, o sistema pode criar um destino com base em se os arquivos que o destino consome são mais recentes que os arquivos ele emite.
MSBuild no IDE
Ao definir as propriedades de projeto no IDE e então salvar o projeto, o Visual C++ grava as configurações do projeto para o arquivo de projeto. O arquivo de projeto contém configurações que são exclusivos do seu projeto, mas não contém todas as configurações necessárias para compilar seu projeto. O arquivo de projeto contém os elementos Import que incluem uma rede de arquivos de suporte adicionais. Os arquivos de suporte contêm as propriedades restantes, os destinos e as configurações necessárias para compilar o projeto.
A maioria dos destinos e propriedades nos arquivos de suporte existe somente para implementar o sistema de compilação. A seção a seguir aborda alguns destinos e propriedades úteis que você pode especificar na linha de comando do MSBuild. Para descobrir mais destinos e propriedades, explore os arquivos em diretórios de arquivo de suporte.
Suporte a diretórios de arquivos
Por padrão, arquivos primários de suporte do Visual C++ estão localizados nos diretórios.
Diretório |
Descrição |
---|---|
drive:\Arquivos de Programas\MSBuild\Microsoft.Cpp\v4.0\version\ |
Contém os arquivos de destino principais (.targets) e arquivos de propriedade (.props) usados pelos destinos. Por padrão, a macro $(VCTargetsPath) referencia este diretório. |
drive:\Arquivos de Programas\MSBuild\Microsoft.Cpp\v4.0\version\Platforms\platform\ |
Contém arquivos de destino e de propriedade específicos de plataforma que substituem destinos e propriedades em seu diretório pai. Este diretório também contém um arquivo .dll que define as tarefas que são usadas pelos destinos neste diretório. O espaço reservado platform representa o subdiretório ARM, Win32 ou x64. |
drive:\Arquivos de Programas\MSBuild\Microsoft.Cpp\v4.0\version\Platforms\platform\PlatformToolsets\toolset\ |
Contém diretórios que permitem a compilação para gerar aplicativos do Visual C++ com a version do conjunto de ferramentas. O espaço reservado platform representa o subdiretório ARM, Win32 ou x64. O espaço reservado toolset representa o subdiretório do conjunto de ferramentas para compilar os aplicativos do Windows, Windows XP ou Windows Phone. |
drive:\Arquivos de Programas\MSBuild\Microsoft.Cpp\v4.0\Platforms\platform\PlatformToolsets\toolset\ |
Contém diretórios que permitem a compilação para gerar aplicativos do Visual C++ 9.0 ou 10.0. O espaço reservado de platform representa Itanium, Win32, ou subdiretório de x64. O espaço reservado toolset representa o subdiretório do conjunto de ferramentas v90, v100. |
Arquivos de suporte
Os diretórios de arquivos de suporte contêm arquivos com as seguintes extensões.
Extensão |
Descrição |
---|---|
.targets |
Contém os elementos XML de Target que especificam as tarefas que são executadas pelo destino. Também pode conter Property Group, Item Group, Item Definition Group e elementos definidos pelo usuário Item usados para atribuir arquivos e opções de linha de comando a parâmetros de tarefa. Para obter mais informações, consulte Elemento Target (MSBuild). |
.props |
Contém Property Group e elementos XML Property definidos pelo usuário que especificam configurações de arquivo e de parâmetro usadas durante a compilação. Também pode conter Item Definition Group e elementos XML definidos pelo usuário Item que especificam configurações adicionais. Os itens definidos em um grupo de definição de item são semelhantes a propriedades, mas não se podem ser acessados de linha de comando. Os arquivos de projeto do Visual C++ frequentemente usam itens em vez de propriedades para representar configurações. Para obter mais informações, consulte Elemento ItemGroup (MSBuild), Elemento ItemDefinitionGroup (MSBuild) e Elemento Item (MSBuild). |
.xml |
Contém os elementos XML que declara e inicializa elementos de interface de usuário do IDE, como folhas e páginas de propriedades e controles de caixas de texto e de caixa de listagem. Os arquivos .xml suportam diretamente o IDE, não o MSBuild. No entanto, os valores de propriedades do IDE são atribuídos para criar propriedades e itens. A maioria dos arquivos .xml está em um subdiretório específico de localidade. Por exemplo, os arquivos para a região de inglês (EUA) estão em (VCTargetsPath)\1033\. |
Destinos e propriedades de usuário
Para usar o MSBuild mais efetivamente na linha de comando, é bom saber quais propriedades e destinos são úteis e relevantes. A maioria das propriedades e destinos ajuda a implementar o sistema de compilação do Visual C++ e, consequentemente, não são relevantes para o usuário. Esta seção descreve algumas propriedades e destinos voltados para o usuário que são proveitosos.
Propriedade de PlatformToolset
A propriedade PlatformToolset determina que conjunto de ferramentas do Visual C++ é usado na compilação. O valor da propriedade é concatenado com cadeias de caracteres literais para formar o caminho de um diretório que contém a propriedade e os arquivos de destino que são necessários para compilar um projeto para uma plataforma específica.
Defina a propriedade PlatformToolset para v110 para usar ferramentas e bibliotecas do Visual C++ no Visual Studio 2012 para compilar seu aplicativo.
msbuild myProject.vcxproj /p:PlatformToolset=v110
Defina a propriedade PlatformToolset para v100 para usar ferramentas e bibliotecas do Visual C++ 2010 para compilar seu aplicativo.
msbuild myProject.vcxproj /p:PlatformToolset=v100
Defina a propriedade PlatformToolset para v90 para usar ferramentas e bibliotecas do Visual C++ 2008 para compilar seu aplicativo. O conjunto de ferramentas do Visual C++ 2008 já deve estar instalado no computador para que essa propriedade seja eficaz.
msbuild myProject.vcxproj /p:PlatformToolset=v90
Propriedade de PreferredToolArchitecture
A propriedade PreferredToolArchitecture determina se o compilador e as ferramentas de 32 bits ou 64 bits são usados na compilação. Essa propriedade não afeta a arquitetura ou configuração da plataforma de saída. Por padrão, MSBuild usa a versão x86 de compilador e ferramentas se esta propriedade não está definida, ou é definida como qualquer valor diferente de x64.
Defina a propriedade PreferredToolArchitecture para x64 para usar o compilador e as ferramentas de 64 bits para compilar seu aplicativo.
msbuild myProject.vcxproj /p:PreferredToolArchitecture=x64
Propriedade UseEnv
Por padrão, as configurações específicas de plataforma para o projeto atual substituem as variáveis de ambiente PATH, INCLUDE, LIB, LIBPATH, CONFIGURATION, e PLATFORM. Defina a propriedade UseEnv para true de modo a garantir que as variáveis de ambiente não sejam substituídas.
msbuild myProject.vcxproj /p:UseEnv=true
Destinos
Há centenas de destinos nos arquivos de suporte do Visual C++. No entanto, a maioria é composta de destinos orientados ao sistema que o usuário pode ignorar. A maioria de destinos do sistema são precedidos por um sublinhado (_) ou tem um nome de que inicia com "PrepareFor", "Compute", "Before", "After", "Pre" ou "Post".
A tabela a seguir lista os diversos destinos voltados para o usuário que são proveitosos.
Destino |
Descrição |
---|---|
BscMake |
Executa a ferramenta Utilitário de Manutenção de Informações de Navegação da Microsoft, bscmake.exe. |
Compilação |
Compila o projeto. Este é o destino padrão para um projeto. |
ClCompile |
Executa a ferramenta do compilador do Visual C++, cl.exe. |
Limpar |
Exclui arquivos de compilação temporários e intermediários. |
Lib |
Executa a ferramenta Gerenciador de Bibliotecas de 32 bits da Microsoft, lib.exe. |
Link |
Executa a ferramenta do vinculador do Visual C++, link.exe. |
ManifestResourceCompile |
Extrai uma lista de recursos de um manifesto e então executa a Ferramenta de Compilador de Recurso do Microsoft Windows, rc.exe. |
Midl |
Executa a ferramenta do compilador Linguagem de Definição da Interface da Microsoft (MIDL), midl.exe. |
Recompilar |
Limpa e em seguida compila seu projeto. |
ResourceCompile |
Executa a ferramenta Compilador de Recursos do Microsoft Windows, rc.exe. |
XdcMake |
Executa a ferramenta Documentação XML, xdcmake.exe. |
Xsd |
Executa a ferramenta Definição de Esquema XML, xsd.exe. |