KDevelop 3.0.x F.A.Q. (Frequently Asked Questions)
Questões Gerais
Onde posso obter o KDevelop? Como o posso instalar?
A Equipa KDevelop não lança nenhuma versão binária do KDevelop (RPMs). Logo os RPMs podem ser encontrados no servidor do seu distribuidor ou nas correspondentes sub-directorias de ftp.kde.org ou um dos seus mirrors.
Dê uma vista de olhos no nosso site de download para obter informação sobre como descarregar e compilar o código fonte.
Posso desenvolver aplicações comerciais com o KDevelop?
Qualquer um e todas as entidades são livres para utilizar o KDevelop. O código gerado pode ser colocado sobre qualquer licença que deseje. Logo, o gerador de projectos tem campos para adicionar os seus próprios direitos de autor aos ficheiros gerados, mas para tornar as coisas mais simples e para ter um exemplo, por defeito existe o aviso da licença GPL. Logo pode adicionar o aviso da sua licença aí.
Quando se trata de editar, etc, o seu programa, usar o KDevelop é como usar um outro qualquer editor, é um programa que é GPL com a intenção de ser usado mas sem implicações no que é usado. Por isso pode escrever software comercial/fechado apesar do facto do próprio KDevelop ser GPL.
A fim de utilizar as funções KDE ou qualquer outra coisa de software livre, você apenas tem de atenção ás notas de licenciamento nas bibliotecas que vai utilizar. Por isso, para desenvolver aplicações KDE/Qt comerciais você apenas necessita de uma licença profissional da Trolltech. As próprias bibliotecas do KDE são LGPL o que significa que você pode utilizar as funções e fazer a linkagem do seu programa ás bibliotecas KDE. Isto refere-se ás bibliotecas kdelibs, ás bibliotecas kdebase (konqueror e kcontrol etc.) e ás bibliotecas koffice (para criar aplicações koffice).
Para mais informação, por favor visite o Licenciamento KDevelop
Posso desenvolver plugins comerciais para o KDevelop?
O KDevelop incluí a biblioteca libkdeveloplgpl.so para permitir o desenvolvimento de plugins comerciais. Esta biblioteca incluí as interfaces KDevelop e funções úteis publicadas sobre LGPL. Se tem uma licença profissional da Trolltech você pode linkar o seu código com a libkdeveloplgpl e publicá-lo sobre qualquer licença.
Eu compilei e instalei o KDevelop 3.0 mas apenas obtenho os menus File e Help
Tal como qualquer outra aplicação KDE, deve garantir que os plugins KDevelop são reconhecidos pelo pelo KDE. Pode fazer a sua instalação na directoria KDE (configure --prefix=/opt/kde3 por exemplo) ou adicionar o camindo do KDevelop á variável de ambiente KDEDIRS e correr o "kbuildsycoca". Exemplo de uma linha de comando para bash (assumindo que o KDevelop está instalado em /home/harry/kdevelop):
export KDEDIRS=/home/harry/kdevelop:$KDEDIRS && kbuildsycoca
Como é que posso alternar entre os ficheiros abertos usando o teclado?
Você pode usar ALT-Left e ALT-Right para saltar para anterior/próximo ficheiro aberto.Estas teclas podem ser configuradas na configuração do KDevelop. Existe também uma função de Abrir Rápido (CTRL-SHIFT-O) para seleccionar e abrir um ficheiro dum projecto e ainda a função Mudar Para Switch To (CTRL-/) que permite mudar para um ficheiro aberto bastando escrever as primeiras letras do seu nome.
Como é que posso introduzir texto quando estou a depurar uma aplicação de consola?
A janela GDB permite a introdução dos seus comandos.
Como é que posso activar a completação de código para bibliotecas externas?
Quando você tem um qualquer projecto C/C++ aberto, vá ao menu Projecto->Opções do Projecto, no diálogo de Opções do Projecto escolha a etiqueta Específico C++, e de seguida a etiqueta Completação do Código. Seleccione o botão Adicionar Armazenenamento Persistente de Classe e complete o assistente Novo Armazenenamento Persistente de Classe. Após ter completado o assistente, assegure-se que a nova classe armazenada está seleccionada na lista de classes persistentes armazenadas na etiqueta Completação de Código.
O script configure não encontra a minha biblioteca Qt.
Use as opções
--with-qt-includes=caminho_para_os_includes_do_seu_qt
e
--with-qt-libraries=caminho_para_as_bibliotecas_do_seu_qt
ou defina a variável de ambiente QTDIR para o caminho onde o seu Qt se encontra instalado
( "export QTDIR=/caminho/para/qt" ).
Corrigindo o configure/Makefile/Makefile.in/config.h não ajuda, após arrancar com autoconf/automake/autoheader as minhas alterações são perdidas. Onde é que devo corrigir as coisas?
Existe uma lista de ficheiros, onde pode coorrigir as coisas para o autotools.
Makefile.am, configure.in.in, configure.in (apenas se não existir um configure.in.in)
[raramente usado: acconfig.h, configure.in.mid, configure.in.bot]
Eu estou a desenvolver uma aplicação onde defino a opção -D para o pré-processador.
Se eu adicionar esta ás opções do meu projecto no KDevelop, tudo funciona bem, mas quando eu distribuo o meu pacote, a opção -D definida no KDevelop não é utilizada. Que tenho que fazer para fazer isto funcionar ?
Edite o ficheiro configure.in(.in) na directoria do primeiro nível do seu código. Aqui, você
tem de introduzir a macro AC_CHECK_COMPILERS:
CPPFLAGS="$CPPFLAGS -DMYDEFINE"
e depois disso tem de recriar o seu novo "configure" invocando
"make -f Makefile.dist" e de seguida voltar a executar o script configure.
Existe outra possibilidade de publicar os meus próprios defines?
Uma outra versão para incluir DEFINEs no seu projecto é publicá-los
no ficheiro config.h.
Para o fazer deve modificar os seguintes ficheiros:
Adicione ao acconfig.h da directoria do primeiro nível do seu projecto a linha seguinte:
#undef O_MEU_DEFINE
e inserir em configure.in(.in), depois da chamada á macro
AC_CONFIG_HEADER(config.h):
AC_DEFINE_UNQUOTED(O_MEU_DEFINE)
(De modo a ser definido em config.h após ter actualizado a sua estrutura com
"make -f Makefile.dist; configure [as suas opções]".
Os requisitos para esta solução são:
AC_CONFIG_HEADER(config.h)
dentro do configure.in(.in) e no código fonte o
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
antes de qualquer outro include ser feito
(normalmento isto já se encontra feito nos nossos modelos de projecto).
BTW: Uma vantagem desta solução é tornar o O_MEU_DEFINE dependente de
certas situações (como por exemplo criar uma opção para o configure).
Isto implica é claro escrever a sua própria função macro.
Estou a desenvolver uma aplicação que necessita de tratamento de excepções.
Como é que o posso fazer?
Edite o ficheiro configure.in(.in) na directoria do primeiro nível do seu código. Aqui, você
tem de introduzir após a macro AC_CHECK_COMPILERS():
CXXFLAGS="$CXXFLAGS $USE_EXCEPTIONS"
e depois disso tem de recriar o seu novo "configure" invocando
"make -f Makefile.dist" na directoria do primeiro nível do seu código e depois voltar a executar
o script configure.
O meu configure.in.in não tem nenhuma chamada AC_CHECK_COMPILERS(). Onde é que posso colocar CXXFLAGS="$CXXFLAGS $USE_EXCEPTIONS" mencionada acima?
As novas versões do configure.in.in foram simplificadas e você pode agora adicionar a linha
após AM_INIT_AUTOMAKE(<package-name>,<version>).
Eu estou a desenvolver uma aplicação que necessita de ser compilada com run-time-type-info.
Como é que o posso fazer?
Edite o ficheiro configure.in(.in) na directoria do primeiro nível do seu código. Aqui, você
tem de introduzir após a macro AC_CHECK_COMPILERS:
CXXFLAGS="$CXXFLAGS $USE_RTTI"
e depois disso tem de recriar o seu novo "configure" invocando
"make -f Makefile.dist" na directoria do primeiro nível do seu código e depois voltar a executar
o script configure.
As soluções acima são boas, mas eu quero que isto apenas para uma certa sub-directoria
(Ex. uma biblioteca estática do meu projecto)
Como é que o posso fazer?
Edite o ficheiro Makefile.am na directoria do código desejada. Aqui, você
tem de introduzir algures fora da parte específica do KDevelop:
KDE_CXXFLAGS=$(USE_EXCEPTIONS)
Tenha cuidado pois isto apenas funciona se o seu projecto estiver a utilizar am_edit.
(Isto apenas funciona para os mais recentes acinclude.m4 & am_edit, AFAWK eles devem ser
mais recentes que 12-09-1999, anteriormente era conhecido por APPEND_CXXFLAGS -
neste lançamento do KDevelop encontrará logo o correcto.)
Deve actualizar a sua estrutura Makefile como se encontra descrito acima
(make -f Makefile.dist; ./configure [opções]).
Qual é a diferença entre CPPFLAGS e CXXFLAGS?
CPPFLAGS é usada para defines (significam flags que você necessita para compilar)
CXXFLAGS é usada para opções do compilador (Ex. -frtti), que são aplicadas também
no processo de linkagem.
Eu vi algumas soluções como por exemplo corrigir o Makefile.am com
DEFS+=-DMYDEFINE
ou
CXXFLAGS+=-fsigned-char
ou
LD_FLAGS+=-L/usr/local/lib
Porque é que não consideram estas?
Existe também um bug dentro do automake 1.4, que não adiciona flags á já existente
Como este comando dentro do Makefile.am, você iria apagar as opções existentes
na flag com esse nome.
Se quer usar essas flags apenas para a sub-directoria do projecto use:
AM_CPPFLAGS=-DMYDEFINE
ou
AM_CXXFLAGS=-fsigned-char
ou
AM_LDFLAGS=-L/usr/local/lib
Tenha cuidado, estas flags apenas são publicadas pela versão 1.4 do automake.
Para definir uma destas flags para todo os projecto, por favor modifique o
configure.in(.in) na directoria do primeiro nível do seu código invés.
Como é que posso garantir que um utilizador do meu projecto vai construir utilizando o
automake versão 1.4?
Adiciona á variável AUTOMAKE_OPTIONS no Makefile.am da directoria de primeiro nível
de código o texto "1.4". Ex.:
AUTOMAKE_OPTIONS = foreign 1.4
Eu adicionei um sub-projecto existente ao meu projecto e este já não é construído.
Isto pode ocorrer se o builddir != topsrcdir. Neste caso execute o comando make distclean antes
de adicionar o sub-projecto.
Pode-se utilizar o AM_CXXFLAGS (dentro do Makefile.am) para flags como -frtti ou
-fexceptions?
Não! Nestes casos existe um problema de ordem. A variável standard CXXFLAGS
publicada pelo acinclude.m4.in já contêm um -fno-rtti (-fno_exceptions).
Se você aplicá-la ao AM_CXXFLAGS o comando do compilador iria inserir
estas flags antes CXXFLAGS, ex. aqui para -frtti:
gpp ... -frtti ... -fno-exceptions -fno-rtti ......
Logo a última flag (neste caso, ainda -fno-rtti) seria utilizada.
KDE_CXXFLAGS pelo contrário seria inserida após a CXXFLAGS standard, e então
iria parecer-se desta forma:
gpp ..... -fno-exceptions -fno-rtti ...... -frtti...
e voilà funciona correctamente.
Tenha cuidado: KDE_CXXFLAGS apenas é publicada para projectos, que usem am_edit
e acinclude.m4.
Porque é que corrigir configure.in(.in) com CXXFLAGS="$USE_EXCEPTIONS $CXXFLAGS" não funciona?
Veja a resposta á questão "Pode-se utilizar o AM_CXXFLAGS (dentro do Makefile.am)
para flags como -frtti ou -fexceptions?" ;-)
Eu estou a usar CXXFLAGS="$USE_EXCEPTIONS" dentro do configure.in(.in) e funciona bem,
porque é que devo usar a vossa solução?
Se usar a sua versão antes de AC_CHECK_COMPILERS() uma chamada como
CXXFLAGS="-pedantic" ./configure
não funcionaria correctamente.
Se a usasse após AC_CHECK_COMPILERS() a variável CXXFLAGS definida em
AC_CHECK_COMPILERS() seria limpa.
(Por exemplo se fosse executado "configure --enable-debug" a CXXFLAGS iria ser
alterada para também inserir informação de debug no seu código.)
Por isso use antes CXXFLAGS="$CXXFLAGS $USE_EXCEPTIONS".
Estou a utilizar cabeçalhos e bibliotecas adicionais para o meu projecto KDE/QT. Colocando
-I/usr/include/foo nas opções do compilador e -L/usr/lib/foo nas
opções do linker não distribui as definições para o tarball.
Que tenho que fazer?
Este é a parte mais difícil de fazer da maneira correcta.
Uma solução fácil, mas não correcta seria adicionar ao configure.in(.in):
all_includes="$all_includes -I/usr/include/foo"
all_libraries="$all_libraries -L/usr/lib/foo"
[o melhor sítio para estas é antes das linhas:
AC_ARG_PROGRAM
AC_OUTPUT( ..... )
no fim do ficheiro.]
Problemas aqui:
- Quem é que pode garantir que os includes estariam sempre em
/usr/include/foo... talvez nalguns sistemas eles possam estar em /usr/local/foo/include
(e talvez as bibliotecas possam estar em /usr/local/foo/lib)??
- Talvez até eu nem tenha instalado foo e a construção falha-se, mas seria melhor
se o configure já tivesse falhado antes com uma messagem mais esclarecedora.
Então para o fazer correctamente teria de adicionar uma função macro ao
configure.in(.in), que efectua uns certos testes e procura pelo "foo" instalado.
Se é isso que deseja fazer, apenas lhe podemos dar uma dica... tente
perceber o acinclude.m4.in ou crie um projecto KDE ogl normal,
aì encontrará um ficheiro chamado qgl.m4, que será concatenado para
acinclude.m4 (veja "Makefile.dist"). Este mostra um exemplo extensivo de
como procurar a biblioteca QT-OpenGL, mas terá de o reescrever para o seu problema.
Talvez até tenha sorte e encontre uma solução para o seu problema dentro do
acinclude.m4.in, e possa usar uma função já existente.
Nas questões acima eu vejo sempre "configure.in(.in)". Eu tenho ambos os ficheiros no meu
projecto. Qual deve ser corrigido?
Se existe um configure.in.in no primeiro nível de directorias do seu projecto altere este.
Se não encontrou um configure.in.in altere o configure.in.
Existe algum HOWTO disponível sobre como trabalhar com diálogos feitos com o QT designer ?
Sim, existe um excelente tutorial em http://women.kde.org/articles/tutorials/kdevelop3/index.html
Eu instalei o htdig mas o htsearch não está disponível ?
Por ex. em sistemas RedHat o executável htsearch é colocado na directoria /cgi-bin do apache.
Pode criar links simbólicos em /usr/bin ou simplesmente adicionar este caminho ao ~/.bashrc
Eu tenho o htdig, htmerge e htsearch disponíveis mas obtenho uma mensagem de erro em que o ficheiro de configuração do htdig não foi encontrado ou é inválido ?
Leia o README.htdig na directoria do código fonte e crie um ficheiro htdig.conf. Depois faça a sua
cópia para $KDEDIR/share/apps/kdevelop/tools. Agora crie o seu index de procura com o menu de
setup do KDevelop.
- Onde posso obter o KDevelop? Como o posso instalar?
- Posso desenvolver aplicações comerciais com o KDevelop?
- Posso desenvolver plugins comerciais para o KDevelop?
- Eu compilei e instalei o KDevelop 3.0 mas apenas obtenho os menus File e Help
- Como é que posso alternar entre os ficheiros abertos usando o teclado?
- Como é que posso introduzir texto quando estou a depurar uma aplicação de consola?
- Como é que posso activar a completação de código para bibliotecas externas?
- script configure
- configure.in.in
- O meu configure.in.in não tem nenhuma chamada AC_CHECK_COMPILERS(). Onde é que posso colocar CXXFLAGS="$CXXFLAGS $USE_EXCEPTIONS" mencionada acima?
- Nas questões acima eu vejo sempre "configure.in(.in)". Eu tenho ambos os ficheiros no meu projecto. Qual deve ser corrigido?
- Porque é que corrigir configure.in(.in) com CXXFLAGS="$USE_EXCEPTIONS $CXXFLAGS" não funciona?
- Eu estou a usar CXXFLAGS="$USE_EXCEPTIONS" dentro do configure.in(.in) e funciona bem, porque é que devo usar a vossa solução?
- Makefile.am
- Qual é a diferença entre CPPFLAGS e CXXFLAGS?
- Eu vi algumas soluções como por exemplo corrigir o Makefile.am com DEFS+=-DMYDEFINE ou CXXFLAGS+=-fsigned-char ou LD_FLAGS+=-L/usr/local/lib Porque é que não consideram estas?
- Pode-se utilizar o AM_CXXFLAGS (dentro do Makefile.am) para flags como -frtti ou -fexceptions?
- htdig
- automake, autoconf
- rtti, run-time type information
- TrollTech's Designer e KDevelop
- outros
- Corrigindo o configure/Makefile/Makefile.in/config.h não ajuda, após arrancar com autoconf/automake/autoheader as minhas alterações são perdidas. Onde é que devo corrigir as coisas?
- Eu estou a desenvolver uma aplicação onde defino a opção -D para o pré-processador. Se eu adicionar esta ás opções do meu projecto no KDevelop, tudo funciona bem, mas quando eu distribuo o meu pacote, a opção -D definida no KDevelop não é utilizada. Que tenho que fazer para fazer isto funcionar ?
- Existe outra possibilidade de publicar os meus próprios defines?
- Estou a desenvolver uma aplicação que necessita de tratamento de excepções. Como é que o posso fazer?
- As soluções acima são boas, mas eu quero que isto apenas para uma certa sub-directoria (Ex. uma biblioteca estática do meu projecto) Como é que o posso fazer?
- Estou a utilizar cabeçalhos e bibliotecas adicionais para o meu projecto KDE/QT. Colocando -I/usr/include/foo nas opções do compilador e -L/usr/lib/foo nas opções do linker não distribui as definições para o tarball. Que tenho que fazer?
Onde posso obter o KDevelop? Como o posso instalar?
A Equipa KDevelop não lança nenhuma versão binária do KDevelop (RPMs). Logo os RPMs podem ser encontrados no servidor do seu distribuidor ou nas correspondentes sub-directorias de ftp.kde.org ou um dos seus mirrors.
Dê uma vista de olhos no nosso site de download para obter informação sobre como descarregar e compilar o código fonte.
Posso desenvolver aplicações comerciais com o KDevelop?
Qualquer um e todas as entidades são livres para utilizar o KDevelop. O código gerado pode ser colocado sobre qualquer licença que deseje. Logo, o gerador de projectos tem campos para adicionar os seus próprios direitos de autor aos ficheiros gerados, mas para tornar as coisas mais simples e para ter um exemplo, por defeito existe o aviso da licença GPL. Logo pode adicionar o aviso da sua licença aí.
Quando se trata de editar, etc, o seu programa, usar o KDevelop é como usar um outro qualquer editor, é um programa que é GPL com a intenção de ser usado mas sem implicações no que é usado. Por isso pode escrever software comercial/fechado apesar do facto do próprio KDevelop ser GPL.
A fim de utilizar as funções KDE ou qualquer outra coisa de software livre, você apenas tem de atenção ás notas de licenciamento nas bibliotecas que vai utilizar. Por isso, para desenvolver aplicações KDE/Qt comerciais você apenas necessita de uma licença profissional da Trolltech. As próprias bibliotecas do KDE são LGPL o que significa que você pode utilizar as funções e fazer a linkagem do seu programa ás bibliotecas KDE. Isto refere-se ás bibliotecas kdelibs, ás bibliotecas kdebase (konqueror e kcontrol etc.) e ás bibliotecas koffice (para criar aplicações koffice).
Para mais informação, por favor visite o Licenciamento KDevelop
Posso desenvolver plugins comerciais para o KDevelop?
O KDevelop incluí a biblioteca libkdeveloplgpl.so para permitir o desenvolvimento de plugins comerciais. Esta biblioteca incluí as interfaces KDevelop e funções úteis publicadas sobre LGPL. Se tem uma licença profissional da Trolltech você pode linkar o seu código com a libkdeveloplgpl e publicá-lo sobre qualquer licença.
Eu compilei e instalei o KDevelop 3.0 mas apenas obtenho os menus File e Help
Tal como qualquer outra aplicação KDE, deve garantir que os plugins KDevelop são reconhecidos pelo pelo KDE. Pode fazer a sua instalação na directoria KDE (configure --prefix=/opt/kde3 por exemplo) ou adicionar o camindo do KDevelop á variável de ambiente KDEDIRS e correr o "kbuildsycoca". Exemplo de uma linha de comando para bash (assumindo que o KDevelop está instalado em /home/harry/kdevelop):
export KDEDIRS=/home/harry/kdevelop:$KDEDIRS && kbuildsycoca
Como é que posso alternar entre os ficheiros abertos usando o teclado?
Você pode usar ALT-Left e ALT-Right para saltar para anterior/próximo ficheiro aberto.Estas teclas podem ser configuradas na configuração do KDevelop. Existe também uma função de Abrir Rápido (CTRL-SHIFT-O) para seleccionar e abrir um ficheiro dum projecto e ainda a função Mudar Para Switch To (CTRL-/) que permite mudar para um ficheiro aberto bastando escrever as primeiras letras do seu nome.
Como é que posso introduzir texto quando estou a depurar uma aplicação de consola?
A janela GDB permite a introdução dos seus comandos.
Como é que posso activar a completação de código para bibliotecas externas?
Quando você tem um qualquer projecto C/C++ aberto, vá ao menu Projecto->Opções do Projecto, no diálogo de Opções do Projecto escolha a etiqueta Específico C++, e de seguida a etiqueta Completação do Código. Seleccione o botão Adicionar Armazenenamento Persistente de Classe e complete o assistente Novo Armazenenamento Persistente de Classe. Após ter completado o assistente, assegure-se que a nova classe armazenada está seleccionada na lista de classes persistentes armazenadas na etiqueta Completação de Código.
O script configure não encontra a minha biblioteca Qt.
Use as opções
--with-qt-includes=caminho_para_os_includes_do_seu_qt
e
--with-qt-libraries=caminho_para_as_bibliotecas_do_seu_qt
ou defina a variável de ambiente QTDIR para o caminho onde o seu Qt se encontra instalado
( "export QTDIR=/caminho/para/qt" ).
Corrigindo o configure/Makefile/Makefile.in/config.h não ajuda, após arrancar com autoconf/automake/autoheader as minhas alterações são perdidas. Onde é que devo corrigir as coisas?
Existe uma lista de ficheiros, onde pode coorrigir as coisas para o autotools.
Makefile.am, configure.in.in, configure.in (apenas se não existir um configure.in.in)
[raramente usado: acconfig.h, configure.in.mid, configure.in.bot]
Eu estou a desenvolver uma aplicação onde defino a opção -D para o pré-processador.
Se eu adicionar esta ás opções do meu projecto no KDevelop, tudo funciona bem, mas quando eu distribuo o meu pacote, a opção -D definida no KDevelop não é utilizada. Que tenho que fazer para fazer isto funcionar ?
Edite o ficheiro configure.in(.in) na directoria do primeiro nível do seu código. Aqui, você
tem de introduzir a macro AC_CHECK_COMPILERS:
CPPFLAGS="$CPPFLAGS -DMYDEFINE"
e depois disso tem de recriar o seu novo "configure" invocando
"make -f Makefile.dist" e de seguida voltar a executar o script configure.
Existe outra possibilidade de publicar os meus próprios defines?
Uma outra versão para incluir DEFINEs no seu projecto é publicá-los
no ficheiro config.h.
Para o fazer deve modificar os seguintes ficheiros:
Adicione ao acconfig.h da directoria do primeiro nível do seu projecto a linha seguinte:
#undef O_MEU_DEFINE
e inserir em configure.in(.in), depois da chamada á macro
AC_CONFIG_HEADER(config.h):
AC_DEFINE_UNQUOTED(O_MEU_DEFINE)
(De modo a ser definido em config.h após ter actualizado a sua estrutura com
"make -f Makefile.dist; configure [as suas opções]".
Os requisitos para esta solução são:
AC_CONFIG_HEADER(config.h)
dentro do configure.in(.in) e no código fonte o
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
antes de qualquer outro include ser feito
(normalmento isto já se encontra feito nos nossos modelos de projecto).
BTW: Uma vantagem desta solução é tornar o O_MEU_DEFINE dependente de
certas situações (como por exemplo criar uma opção para o configure).
Isto implica é claro escrever a sua própria função macro.
Estou a desenvolver uma aplicação que necessita de tratamento de excepções.
Como é que o posso fazer?
Edite o ficheiro configure.in(.in) na directoria do primeiro nível do seu código. Aqui, você
tem de introduzir após a macro AC_CHECK_COMPILERS():
CXXFLAGS="$CXXFLAGS $USE_EXCEPTIONS"
e depois disso tem de recriar o seu novo "configure" invocando
"make -f Makefile.dist" na directoria do primeiro nível do seu código e depois voltar a executar
o script configure.
O meu configure.in.in não tem nenhuma chamada AC_CHECK_COMPILERS(). Onde é que posso colocar CXXFLAGS="$CXXFLAGS $USE_EXCEPTIONS" mencionada acima?
As novas versões do configure.in.in foram simplificadas e você pode agora adicionar a linha
após AM_INIT_AUTOMAKE(<package-name>,<version>).
Eu estou a desenvolver uma aplicação que necessita de ser compilada com run-time-type-info.
Como é que o posso fazer?
Edite o ficheiro configure.in(.in) na directoria do primeiro nível do seu código. Aqui, você
tem de introduzir após a macro AC_CHECK_COMPILERS:
CXXFLAGS="$CXXFLAGS $USE_RTTI"
e depois disso tem de recriar o seu novo "configure" invocando
"make -f Makefile.dist" na directoria do primeiro nível do seu código e depois voltar a executar
o script configure.
As soluções acima são boas, mas eu quero que isto apenas para uma certa sub-directoria
(Ex. uma biblioteca estática do meu projecto)
Como é que o posso fazer?
Edite o ficheiro Makefile.am na directoria do código desejada. Aqui, você
tem de introduzir algures fora da parte específica do KDevelop:
KDE_CXXFLAGS=$(USE_EXCEPTIONS)
Tenha cuidado pois isto apenas funciona se o seu projecto estiver a utilizar am_edit.
(Isto apenas funciona para os mais recentes acinclude.m4 & am_edit, AFAWK eles devem ser
mais recentes que 12-09-1999, anteriormente era conhecido por APPEND_CXXFLAGS -
neste lançamento do KDevelop encontrará logo o correcto.)
Deve actualizar a sua estrutura Makefile como se encontra descrito acima
(make -f Makefile.dist; ./configure [opções]).
Qual é a diferença entre CPPFLAGS e CXXFLAGS?
CPPFLAGS é usada para defines (significam flags que você necessita para compilar)
CXXFLAGS é usada para opções do compilador (Ex. -frtti), que são aplicadas também
no processo de linkagem.
Eu vi algumas soluções como por exemplo corrigir o Makefile.am com
DEFS+=-DMYDEFINE
ou
CXXFLAGS+=-fsigned-char
ou
LD_FLAGS+=-L/usr/local/lib
Porque é que não consideram estas?
Existe também um bug dentro do automake 1.4, que não adiciona flags á já existente
Como este comando dentro do Makefile.am, você iria apagar as opções existentes
na flag com esse nome.
Se quer usar essas flags apenas para a sub-directoria do projecto use:
AM_CPPFLAGS=-DMYDEFINE
ou
AM_CXXFLAGS=-fsigned-char
ou
AM_LDFLAGS=-L/usr/local/lib
Tenha cuidado, estas flags apenas são publicadas pela versão 1.4 do automake.
Para definir uma destas flags para todo os projecto, por favor modifique o
configure.in(.in) na directoria do primeiro nível do seu código invés.
Como é que posso garantir que um utilizador do meu projecto vai construir utilizando o
automake versão 1.4?
Adiciona á variável AUTOMAKE_OPTIONS no Makefile.am da directoria de primeiro nível
de código o texto "1.4". Ex.:
AUTOMAKE_OPTIONS = foreign 1.4
Eu adicionei um sub-projecto existente ao meu projecto e este já não é construído.
Isto pode ocorrer se o builddir != topsrcdir. Neste caso execute o comando make distclean antes
de adicionar o sub-projecto.
Pode-se utilizar o AM_CXXFLAGS (dentro do Makefile.am) para flags como -frtti ou
-fexceptions?
Não! Nestes casos existe um problema de ordem. A variável standard CXXFLAGS
publicada pelo acinclude.m4.in já contêm um -fno-rtti (-fno_exceptions).
Se você aplicá-la ao AM_CXXFLAGS o comando do compilador iria inserir
estas flags antes CXXFLAGS, ex. aqui para -frtti:
gpp ... -frtti ... -fno-exceptions -fno-rtti ......
Logo a última flag (neste caso, ainda -fno-rtti) seria utilizada.
KDE_CXXFLAGS pelo contrário seria inserida após a CXXFLAGS standard, e então
iria parecer-se desta forma:
gpp ..... -fno-exceptions -fno-rtti ...... -frtti...
e voilà funciona correctamente.
Tenha cuidado: KDE_CXXFLAGS apenas é publicada para projectos, que usem am_edit
e acinclude.m4.
Porque é que corrigir configure.in(.in) com CXXFLAGS="$USE_EXCEPTIONS $CXXFLAGS" não funciona?
Veja a resposta á questão "Pode-se utilizar o AM_CXXFLAGS (dentro do Makefile.am)
para flags como -frtti ou -fexceptions?" ;-)
Eu estou a usar CXXFLAGS="$USE_EXCEPTIONS" dentro do configure.in(.in) e funciona bem,
porque é que devo usar a vossa solução?
Se usar a sua versão antes de AC_CHECK_COMPILERS() uma chamada como
CXXFLAGS="-pedantic" ./configure
não funcionaria correctamente.
Se a usasse após AC_CHECK_COMPILERS() a variável CXXFLAGS definida em
AC_CHECK_COMPILERS() seria limpa.
(Por exemplo se fosse executado "configure --enable-debug" a CXXFLAGS iria ser
alterada para também inserir informação de debug no seu código.)
Por isso use antes CXXFLAGS="$CXXFLAGS $USE_EXCEPTIONS".
Estou a utilizar cabeçalhos e bibliotecas adicionais para o meu projecto KDE/QT. Colocando
-I/usr/include/foo nas opções do compilador e -L/usr/lib/foo nas
opções do linker não distribui as definições para o tarball.
Que tenho que fazer?
Este é a parte mais difícil de fazer da maneira correcta.
Uma solução fácil, mas não correcta seria adicionar ao configure.in(.in):
all_includes="$all_includes -I/usr/include/foo"
all_libraries="$all_libraries -L/usr/lib/foo"
[o melhor sítio para estas é antes das linhas:
AC_ARG_PROGRAM
AC_OUTPUT( ..... )
no fim do ficheiro.]
Problemas aqui:
- Quem é que pode garantir que os includes estariam sempre em
/usr/include/foo... talvez nalguns sistemas eles possam estar em /usr/local/foo/include
(e talvez as bibliotecas possam estar em /usr/local/foo/lib)??
- Talvez até eu nem tenha instalado foo e a construção falha-se, mas seria melhor
se o configure já tivesse falhado antes com uma messagem mais esclarecedora.
Então para o fazer correctamente teria de adicionar uma função macro ao
configure.in(.in), que efectua uns certos testes e procura pelo "foo" instalado.
Se é isso que deseja fazer, apenas lhe podemos dar uma dica... tente
perceber o acinclude.m4.in ou crie um projecto KDE ogl normal,
aì encontrará um ficheiro chamado qgl.m4, que será concatenado para
acinclude.m4 (veja "Makefile.dist"). Este mostra um exemplo extensivo de
como procurar a biblioteca QT-OpenGL, mas terá de o reescrever para o seu problema.
Talvez até tenha sorte e encontre uma solução para o seu problema dentro do
acinclude.m4.in, e possa usar uma função já existente.
Nas questões acima eu vejo sempre "configure.in(.in)". Eu tenho ambos os ficheiros no meu
projecto. Qual deve ser corrigido?
Se existe um configure.in.in no primeiro nível de directorias do seu projecto altere este.
Se não encontrou um configure.in.in altere o configure.in.
Existe algum HOWTO disponível sobre como trabalhar com diálogos feitos com o QT designer ?
Sim, existe um excelente tutorial em http://women.kde.org/articles/tutorials/kdevelop3/index.html
Eu instalei o htdig mas o htsearch não está disponível ?
Por ex. em sistemas RedHat o executável htsearch é colocado na directoria /cgi-bin do apache.
Pode criar links simbólicos em /usr/bin ou simplesmente adicionar este caminho ao ~/.bashrc
Eu tenho o htdig, htmerge e htsearch disponíveis mas obtenho uma mensagem de erro em que o ficheiro de configuração do htdig não foi encontrado ou é inválido ?
Leia o README.htdig na directoria do código fonte e crie um ficheiro htdig.conf. Depois faça a sua
cópia para $KDEDIR/share/apps/kdevelop/tools. Agora crie o seu index de procura com o menu de
setup do KDevelop.
Esta página foi actualizada em: Sáb 20 Ago 2005 21:41:01 CEST
Tradução Portuguesa mantida por Amilcar do Carmo LucasSe ocorrer algum problema com este site, por favor contacte o webmaster.
