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.
Saia do IDE se ele estiver em execução.
Adicione o seguinte sinalizador à entrada netbeans_default_options do arquivo ${NB}/etc/netbeans.conf:
-J-Dcnd.toolchain.personality.create_shadow=true
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:
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.
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.
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.
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.
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.
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.
Copie e cole o texto seguinte dentro da marca filesystem:
Abra o arquivo Bundle.properties e adicione a seguinte sequência de caracteres: CND/ToolChains/GNU_tuned=My GNU Tuned Tool Collection
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.
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.
Copie e cole o texto seguinte em GNU_tuned_flavor.xml:
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.
Copie e cole o texto seguinte em GNU_tuned_cpp.xml:
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:
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.
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.
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:
Crie um novo projeto C/C++ de amostra Welcome selecionando Arquivo > Novo projeto > Amostras > C/C++ > Welcome.
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.
Construa o projeto. Observe que o compilador possui os sinalizadores -g3 -gdwarf-2
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:
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.
Selecione Ferramentas > Plug-ins e clique na aba Baixado na caixa de diálogo Plug-ins.
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.
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.
Clique em Próximo para avançar pelo instalador e continuar até que a instalação seja concluída.
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.
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.
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: