corner imagecorner image
IDEPlatformPluginsDocs & SupportCommunityPartners

Usando o descritor da coleção de ferramentas C/C++ - Tutorial do NetBeans IDE 6.9

Conteúdo

O conteúdo desta página se aplica ao NetBeans IDE 6.9

Para seguir este tutorial, você precisa do seguinte software.

Software Versão necessária
NetBeans IDE (incluindo o suporte C/C++) Versão 6.9
Java Development Kit (JDK) Versão 6
Compiladores C e C++, make, gdb Conjuntos de ferramentas C/C++ testados com o NetBeans IDE

Consulte as Instruções de instalação do NetBeans IDE 6.9 e Configuração do NetBeans IDE para C/C++/Fortran
para obter informações sobre o download e a instalação do software necessário.

Introdução

Deseja alterar os sinalizadores do compilador que o NetBeans IDE usa por padrão para compilar arquivos C/C++? Deseja adicionar um compilador que não seja suportado pelo NetBeans IDE? Este artigo pode ajudá-lo a faça isso! Este tutorial demonstra como editar coleções de ferramentas existentes ou criar uma coleção de ferramentas personalizada no NetBeans IDE 6.9.

Coleções de ferramentas

Uma coleção de ferramentas é um conjunto de compiladores, utilitários make e depuradores. Sempre que compilar, usar make ou depurar o código, o NetBeans IDE executará um arquivo executável descrito no descritor da coleção de ferramentas. O recurso Assistência de código inclui caminhos e macros obtidos da coleção de ferramentas.

O descritor da coleção de ferramentas é um arquivo xml localizado no módulo ${NB}/cnd/modules/org-netbeans-modules-cnd.jar na pasta org/netbeans/modules/cnd/toolchain/resources/toolchaindefinition/. Estes arquivos xml originais do descritor de ferramentas do NetBeans não deveriam ser editados. Este artigo ensina como criar cópias que podem ser editadas.

Editando os descritores de coleções de ferramentas

A edição de um descritor da coleção de ferramentas é um pouco difícil, visto que o NetBeans IDE não oferece uma GUI para edição de descritores. Porém aqui descrevemos como fazer cópias de "sombra" dos descritores de coleções de ferramentas para permitir editá-los a fim de alterar a forma como o IDE usa as ferramentas.

  1. Saia do IDE se ele estiver em execução.
  2. Adicione o seguinte sinalizador à entrada netbeans_default_options do arquivo ${NB}/etc/netbeans.conf:
    -J-Dcnd.toolchain.personality.create_shadow=true
  3. Inicie o IDE, escolha Ferramentas > Opções e selecione C/C++ na parte superior do painel da janela Opções. O IDE cria versões de "sombra" dos descritores da coleção de ferramentas em seu diretório:
    ${userdir}/config/CND/ToolChain

    A lista de descritores deveria ser semelhante à seguinte:

    Cygwin.xml		GNU_solaris.xml		SunStudio.xml		SunStudio_12.1.xml	SunStudio_Linux.xml
    Cygwin_4.x.xml		Interix.xml		SunStudioExpress.xml	SunStudio_12.xml
    GNU.xml			MinGW.xml		SunStudio_10.xml	SunStudio_8.xml
    GNU_mac.xml		MinGW_TDM.xml		SunStudio_11.xml	SunStudio_9.xml
    

  4. Você pode editar o descritor da toolchain que estiver usando e o IDE usará o descritor depois que for reiniciado. Consulte Detalhes do arquivo XML da coleção de ferramentas para obter informações sobre as marcas usadas nestes arquivos XML do descritor.

Remova o sinalizador -J-Dcnd.toolchain.personality.create_shadow=true antes de iniciar o IDE. O IDE precisa somente de um vez para criar os descritores de sombra.

Criando uma coleção de ferramentas personalizada

Você pode criar sua própria coleção de ferramentas. O exemplo seguinte cria um novo módulo NetBeans que contém uma nova coleção de ferramentas. Para obter informações gerais sobre a criação de módulos NetBeans, consulte Início rápido do plug-in do NetBeans.

  1. Certifique-se de que a sua instalação do NetBeans inclua o módulo Desenvolvimento de plug-in do NetBeans escolhendo Ferramentas > Plug-ins e clicando na aba Instalado. Se o módulo Desenvolvimento de plug-in do NetBeans não estiver instalado, clique na aba Plug-ins disponíveis e instale o módulo. É possível encontrá-lo rapidamente digitando "plug-in" na caixa Pesquisar.
  2. Crie um novo módulo NetBeans escolhendo Arquivo > Novo projeto. Na página Escolher projeto do assistente de Novo projeto, selecione a categoria Módulos NetBeans e o projeto Módulo na primeira etapa do assistente. Clique em Avançar.
  3. Na página Nome e localização, digite o nome do projeto, por exemplo mytoolchain e deixe todos os campos como estão. Clique em Próximo.
  4. Na página Configuração básica de módulos, digite o nome de base do código, por exemplo org.myhome.mytoolchain, e selecione a caixa de verificação Gerar camada XML. Clique em Terminar. O IDE cria um novo projeto.
  5. Procure o arquivo layer.xml na janela Projetos no nó Pacotes de código-fonte. Clique duas vezes no arquivo layer.xml para abri-lo no editor.
  6. Copie e cole o texto seguinte dentro da marca filesystem:

    <folder name="CND">
            <folder name="Tool">
                <file name="GNU_tuned_flavor" url="toolchain/GNU_tuned_flavor.xml">
                    <attr name="extends" stringvalue="GNU_flavor"/>
                </file>
                <file name="GNU_tuned_cpp" url="toolchain/GNU_tuned_cpp.xml">
                    <attr name="extends" stringvalue="GNU_cpp"/>
                </file>
            </folder>
            <folder name="ToolChains">
                <folder name="GNU_tuned">
                    <attr name="position" intvalue="5000"/>
                    <attr name="SystemFileSystem.localizingBundle" stringvalue="org.myhome.mytoolchain.Bundle"/>
                    <file name="flavor.shadow">
                        <attr name="originalFile" stringvalue="CND/Tool/GNU_tuned_flavor"/>
                    </file>
                    <file name="c.shadow">
                        <attr name="originalFile" stringvalue="CND/Tool/GNU_c"/>
                    </file>
                    <file name="cpp.shadow">
                        <attr name="originalFile" stringvalue="CND/Tool/GNU_tuned_cpp"/>
                    </file>
                    <file name="fortran.shadow">
                        <attr name="originalFile" stringvalue="CND/Tool/GNU_fortran"/>
                    </file>
                    <file name="assembler.shadow">
                        <attr name="originalFile" stringvalue="CND/Tool/GNU_assembler"/>
                    </file>
                    <file name="scanner.shadow">
                        <attr name="originalFile" stringvalue="CND/Tool/GNU_scanner"/>
                    </file>
                    <file name="linker.shadow">
                        <attr name="originalFile" stringvalue="CND/Tool/GNU_linker"/>
                    </file>
                    <file name="make.shadow">
                        <attr name="originalFile" stringvalue="CND/Tool/GNU_make"/>
                    </file>
                    <file name="debugger.shadow">
                        <attr name="originalFile" stringvalue="CND/Tool/GNU_debugger"/>
                    </file>
                    <file name="qmake.shadow">
                        <attr name="originalFile" stringvalue="CND/Tool/GNU_qmake"/>
                    </file>
                    <file name="cmake.shadow">
                        <attr name="originalFile" stringvalue="CND/Tool/GNU_cmake"/>
                    </file>
                </folder>
            </folder>
        </folder>
        
  7. Abra o arquivo Bundle.properties e adicione a seguinte sequência de caracteres:
    CND/ToolChains/GNU_tuned=My GNU Tuned Tool Collection
  8. Crie um subpacote toolchain clicando com o botão direito do mouse no pacote mytoolchain em Pacotes de código-fonte e selecionando Novo > Pacote Java.
  9. Crie um novo arquivo no pacote toolchain clicando com o botão direito do mouse no subpacote toolchain e selecionando Novo > Arquivo vazio. Chame o projeto de GNU_tuned_flavor.xml e clique em Próximo.
  10. Copie e cole o texto seguinte em GNU_tuned_flavor.xml:
    <?xml version="1.0" encoding="UTF-8"?>
    <toolchaindefinition xmlns="http://www.netbeans.org/ns/cnd-toolchain-definition/1">
        <toolchain name="GNU_tuned_flavor" display="GNU_tuned" family="GNU" qmakespec="${os}-g++"/>
        <platforms stringvalue="linux,sun_intel,sun_sparc"/>
    </toolchaindefinition>
    
  11. Crie um novo arquivo no pacote toolchain clicando com o botão direito do mouse no subpacote toolchain e selecionando Novo > Arquivo vazio. Chame o projeto de GNU_tuned_cpp.xml e clique em Próximo.
  12. Copie e cole o texto seguinte em GNU_tuned_cpp.xml:
    <?xml version="1.0" encoding="UTF-8"?>
    <toolchaindefinition xmlns="http://www.netbeans.org/ns/cnd-toolchain-definition/1">
        <cpp>
            <compiler name="g++"/>
            <development_mode>
                <fast_build flags=""/>
                <debug flags="-g3 -gdwarf-2" default="true"/>
                <performance_debug flags="-g -O"/>
                <test_coverage flags="-g"/>
                <diagnosable_release flags="-g -O2"/>
                <release flags="-O2"/>
                <performance_release flags="-O3"/>
            </development_mode>
        </cpp>
    </toolchaindefinition>
    
    Observe que os sinalizadores de depuração estão definidos como -g3 e -gdwarf-2, que são diferentes dos sinalizadores definidos na descrição da coleção de ferramentas GNU.
    A árvore do projeto é semelhante à imagem seguinte:


  13. Na janela Projetos, clique com o botão direito do mouse no nó do projeto mytoolchain e escolha Executar. O módulo é construído e instalado em uma nova instância do IDE, que é a plataforma de destino padrão dos módulos. A plataforma de destino se abre, de modo que você possa experimentar o novo módulo.
  14. No módulo em execução, escolha Ferramentas > Opções, selecione C/C++ na parte superior do painel da janela Opções e selecione a aba Ferramentas de construção.
  15. Se a nova coleção de ferramentas (GNU_tuned) não for exibida, clique em Restaurar padrão. Clique em Sim para continuar quando solicitado para verificar novamente seu ambiente. O IDE mostra a nova coleção de ferramentas:


  16. Crie um novo projeto C/C++ de amostra Welcome selecionando Arquivo > Novo projeto > Amostras > C/C++ > Welcome.
  17. Clique com o botão direito do mouse no nó do projeto e escolha Propriedades. Na caixa de diálogo Propriedades do projeto, selecione o nó Construir, defina a Coleção de ferramentas como a coleção de ferramentas GNU_tuned e clique em OK.
  18. Construa o projeto. Observe que o compilador possui os sinalizadores -g3 -gdwarf-2
    g++ -c -g3 -gdwarf-2 -MMD -MP -MF build/Debug/GNU_tuned-Solaris-x86/welcome.o.d -o build/Debug/GNU_tuned-Solaris-x86/welcome.o welcome.cc
  19. Na caixa de diálogo Propriedades do projeto, selecione a coleção de ferramentas GNU e clique em OK.
  20. Construa o projeto novamente e compare a linha compilada na janela de saída:
    g++ -c -g -MMD -MP -MF build/Debug/GNU-Solaris-x86/welcome.o.d -o build/Debug/GNU-Solaris-x86/welcome.o welcome.cc

Assim, na coleção de ferramentas GNU_tuned, conseguimos alterar os sinalizadores para depuração, Modo de desenvolvimento para o compilador GNU.

Se quiser usar o novo módulo para a coleção de ferramentas GNU_tuned no seu IDE habitual, você pode criar um binário (um arquivo .nbm) e adicioná-lo como um plug-in:

  1. Clique com o botão direito do mouse no projeto do módulo mytoolchain e selecione Criar NBM. O arquivo .nbm é criado no subdiretório de construção do projeto, o qual pode ser visto na aba Arquivos.
  2. Selecione Ferramentas > Plug-ins e clique na aba Baixado na caixa de diálogo Plug-ins.
  3. Clique em Adicionar, vá até o diretório de construção, selecione o módulo do arquivo .nbm e clique em Abrir. O módulo de plug-in é adicionado à lista na aba Baixado.
  4. Clique na caixa de verificação para selecionar o módulo na aba Baixado e clique no botão Instalar. O instalador de plug-in do NetBeans se abre.
  5. Clique em Próximo para avançar pelo instalador e continuar até que a instalação seja concluída.
  6. Reinicie o IDE, em seguida, escolha Ferramentas > Opções, selecione C/C++ na parte superior do painel da janela Opções e selecione a aba Ferramentas de construção.
  7. Se a nova coleção de ferramentas (GNU_tuned) não for exibida, clique em Restaurar padrão. Clique em Sim para continuar quando solicitado para verificar novamente seu ambiente.

Detalhes do arquivo XML da coleção de ferramentas

Trata-se de uma descrição das marcas mais importantes do arquivo xml da coleção de ferramentas.

Para obter um esquema de todos os identificadores e atributos suportados dos arquivos xml de toolchain, consulte o arquivo toolchaindefinition.xsd na árvore de código-fonte do NetBeans IDE 6.9.

Marcas de definição da coleção de ferramentas

Tags Atributos Descrição
toolchain Nome da coleção de ferramentas
nome Nome da coleção de ferramentas
display Nome de exibição da coleção de ferramentas
family Nome do grupo da coleção de ferramentas
platforms Plataformas suportadas
stringvalue Lista das plataformas suportadas separadas por vírgula.
Os valores possíveis são:
  • linux
  • unix
  • sun_intel
  • sun_sparc
  • windows
  • mac
  • none
makefile_writer Escritor de makefile personalizado.
classe Nome da classe do escritor de makefile personalizado. Deveria implementar
org.netbeans.modules.cnd.makeproject.spi.configurations.MakefileWriter.
drive_letter_prefix Prefixo especial para nomes de arquivos
stringvalue "/" para unix
"/cygdrive/" para cygwin no Windows
base_folders Contêiner das marcas base_folder.
Uma ou mais marcas base_folder estão contidas em uma marca base_folders.
base_folder Descrição do diretório base dos compiladores.
Este marca pode conter as seguintes marcas:
regestry Chave de registro Windows da ferramenta. Observe que a marca XML deve ser escrita "regestry" embora seja um erro ortográfico.
pattern Expressão regular que permite que o NetBeans IDE localize o compilador no registro
suffix Pasta com os arquivos executáveis
path_patern Expressão regular que permite que o NetBeans IDE localize o compilador examinando os caminhos Observe que a marca XML deve ser escrita "path_patern" embora seja um erro ortográfico.
command_folders Contêiner das marcas command_folder.
Uma ou mais marcas commander_folder estão contidas em uma marca command_folders.
command_folder Descreve o diretório no qual se encontram os comandos do tipo UNIX.
Necessários somente para compiladores MinGW no Windows. A marca command_folder pode conter as seguintes marcas:
regestry Chave de registro Windows de comandos. Observe que a marca XML deve ser escrita "regestry" embora seja um erro ortográfico.
pattern Expressão regular que permite que o NetBeans IDE localize a pasta de comandos no registro
suffix Pasta com os arquivos executáveis
path_patern Expressão regular que permite que o NetBeans IDE localize os comandos. Observe que a marca XML deve ser escrita "path_patern" embora seja um erro ortográfico.
scanner Nome do serviço de análise de erros, consulte Criando um manipulador de erros do compilador personalizado
id Nome do serviço de análise de erros

Sinalizadores do compilador

Esta tabela lista as marcas usadas para descrever os compiladores e especificar os sinalizadores do compilador do toolchain.

Tags Descrição Exemplo de compilador GNU
c,cpp O conjunto de sinalizadores do compilador está nos seguintes subnós
recognizer Expressão regular que permite localizar o compilador Para GNU em cygwin no Windows
.*[\\/].*cygwin.*[\\/]bin[\\/]?$
compiler Nome do compilador (nome do arquivo executável) gcc ou g++
versão Sinalizador da versão --versão
system_include_paths Sinalizadores para obter caminhos de inclusão do sistema -x c -E -v
system_macros Sinalizadores para obter as macros do sistema -x c -E -dM
user_include Sinalizador para adicionar caminho de inclusão do usuário -I
user_macro Sinalizador para adicionar macro do usuário -D
development_mode Grupos de sinalizadores para modos diferentes de desenvolvimento
warning_level Grupos de sinalizadores para níveis diferentes de desenvolvimento
architecture Grupos de sinalizadores para arquiteturas diferentes
strip Sinalizador para informações de depuração da faixa -s
dependency_generation Sinalizadores da geração de dependência -MMD -MP -MF $@.d
precompiled_header Sinalizadores do cabeçalho pré-compilado -o $@
multithreading Grupos de sinalizadores do suporte à multissegmentação
padrão Grupos de sinalizadores para padrões diferentes de linguagens
language_extension Grupos de sinalizadores para extensões diferentes de linguagens

Criando um provedor de compilador personalizado

O NetBeans IDE possui um provedor de compilador padrão:
org.netbeans.modules.cnd.toolchain.compilers.MakeProjectCompilerProvider
Este provedor funciona bastante bem na maioria dos toolchains, mas você pode criar seu próprio provedor.

Para criar seu próprio provedor de compilador:

  • amplie a classe abstrata org.netbeans.modules.cnd.api.compilers.CompilerProvider
  • defina a classe como serviço e coloque-a antes do provedor padrão:
    @org.openide.util.lookup.ServiceProvider(service = org.netbeans.modules.cnd.spi.toolchain.CompilerProvider.class,
    position=500)
    public class CustomCompilerProvider extends CompilerProvider {
    ...
    }
    
    O atributo position=500 garante que o provedor personalizado será chamado antes do provedor padrão. O provedor personalizado deveria retornar "Tool" não-nula no método "createCompiler()" para a ferramenta que deveria ser substituída.

Criando um manipulador de erros do compilador personalizado

O NetBeans IDE possui dois manipuladores de erros do compilador padrão.

  • para compilador GNU
  • para compilador Sun Studio

O manipulador do compilador GNU funciona bastante bem em qualquer compilador GNU, mas, se quiser, pode definir seus próprios manipuladores de erros do compilador.

Para criar seu próprio manipulador de erro do compilador:

  • estenda a classe abstrata org.netbeans.modules.cnd.api.compilers.CompilerProvider
  • defina a classe como serviço:
    @org.openide.util.lookup.ServiceProvider(service = org.netbeans.modules.cnd.spi.toolchain.CompilerProvider.class)
          public class CustomCompilerProvider extends ErrorParserProvider {
              ...
              @Override
              public String getID() {
          	return "MyParser";  // NOI18N
              }
          }
  • vincule o analisador de erros e a descrição da coleção de ferramentas através do ID:
    </scanner id="MyParser">
    ...
      </scanner>