Pergunta

Decidi deixar minha instalação do Windows para trás e agora estou executando o Debian como meu sistema operacional padrão. Eu sempre codifiquei no Windows e especificamente com o Visual Studio. Atualmente, estou tentando me acostumar a compilar meu código no Linux.

Embora eu ainda tenha muita documentação para ler, e não espere que vocês facilitem muito para mim, ainda seria bom conseguir algumas dicas sobre por onde começar. Tenho algumas perguntas específicas, mas sinto -me à vontade para sugerir/recomendar qualquer outra coisa sobre o assunto.

  • Quais são os guias recomendados sobre a criação de um arquivo make, como faço para compilar com esse makefile (eu me chamo de g ++, eu uso 'Make'?)?)
  • Olhando para outro software Linux, eles quase sempre parecem ter um arquivo 'configurar'. o que exatamente isto faz? Ele verifica apenas se as bibliotecas necessárias estão instaladas ou é mais do que apenas verificar os requisitos?
  • Como faço para vincular as bibliotecas e como isso se relaciona com meus parâmetros makefile ou g ++? No Windows, eu compilaria a biblioteca, incluiria alguns arquivos de cabeçalho, informaria ao meu vinculador qual arquivo lib adicional para vincular e copiar um arquivo DLL. Como exatamente esse processo funciona no Linux?
  • Recomendações para editores de código? Atualmente, estou usando o Nano e ouvi falar de Vim e Emacs, mas não sei quais são os benefícios deles. Existem outros e por que eu os consideraria em algum dos três anteriores? Nota: Não estou procurando um IDE.

Qualquer ajuda, links para guias e documentação (de preferência aqueles que visam iniciantes) são muito apreciados!

Foi útil?

Solução

Quais são os guias recomendados sobre a criação de um arquivo make, como faço para compilar com esse makefile (eu me chamo de g ++, eu uso 'Make'?)?)

Você constrói a partir do Makefile, invocando "Make". E dentro do seu Makefile, você compila e vincula usando G ++ e LD.

Olhando para outro software Linux, eles quase sempre parecem ter um arquivo 'configurar'. o que exatamente isto faz? Ele verifica apenas se as bibliotecas necessárias estão instaladas ou é mais do que apenas verificar os requisitos?

É um script geralmente usado para configurar várias coisas com base no ambiente usado para a construção. Às vezes, é apenas um script básico do shell, outras vezes chama ferramentas como o AutoConf para descobrir o que está disponível ao criar. O script "configurar" geralmente também é um local para o usuário especificar várias coisas opcionais a serem construídas ou excluídas, como suporte para recursos experimentais.

Como faço para vincular as bibliotecas e como isso se relaciona com meus parâmetros makefile ou g ++? No Windows, eu compilaria a biblioteca, incluiria alguns arquivos de cabeçalho, informaria ao meu vinculador qual arquivo lib adicional para vincular e copiar um arquivo DLL. Como exatamente esse processo funciona no Linux?

LD é o ligante GNU. Você pode invocar isso separadamente (que é o que a maioria dos artigos de gravação acabará fazendo), ou você pode ter um delegado G ++. As opções que você passa para G ++ e LD determinam onde procurar cabeçalhos incluídos, bibliotecas para vincular e como produzir o resultado.

Recomendações para editores de código? Atualmente, estou usando o Nano e ouvi falar de Vim e Emacs, mas não sei quais são os benefícios deles. Existem outros e por que eu os consideraria em algum dos três anteriores? Nota: Não estou procurando um IDE.

Vim e Emacs são editores muito flexíveis que suportam um monte de usos diferentes. Use o que for melhor para você, embora eu sugira que você possa querer algumas coisas mínimas, como destaque da sintaxe.

Outras dicas

Apenas uma nota para acompanhar as respostas de Mandyk.

Criar arquivos Make manualmente é geralmente uma maneira muito inútil de criar variantes do Linux Distro/UNIX. Existem muitos sistemas de construção para gerar arquivos de geração automática, construindo sem arquivos de fabricação. GNU AutoTools, Cmake, SCONS, geléia, etc.

Também para se aprofundar mais sobre a configuração.

  • Cheques compiladores disponíveis, bibliotecas, arquitetura do sistema.
  • Garante que seu sistema corresponda à lista de pacotes compatíveis apropriada.
  • Permite especificar argumentos da linha de comando para especializar sua construção, instalar caminho, pacotes de opções etc.
  • Configurar então gera um makefile apropriado específico para o seu sistema.

Quais são os guias recomendados sobre a criação de um arquivo make, como faço para compilar com esse makefile (eu me chamo de g ++, eu uso 'Make'?)?)

Eu aprendi a escrever makefiles lendo o GNU faz manual.

Olhando para outro software Linux, eles quase sempre parecem ter um arquivo 'configurar'. o que exatamente isto faz? Ele verifica apenas se as bibliotecas necessárias estão instaladas ou é mais do que apenas verificar os requisitos?

O arquivo de configuração geralmente está associado a AutoTools. Como o nome do script sugere, ele permite configurar o software. Da perspectiva do desenvolvedor, isso significa principalmente definir macros, que determinam variáveis, quais bibliotecas estão disponíveis e tal. Ele também testa a disponibilidade de bibliotecas. No final, o script gera um GNU makefile, que você pode usar para realmente criar e instalar o software.

O sistema de construção da GNU é apenas um dos muitos. Não gosto particularmente do sistema de construção do GNU, pois ele tende a ser mais lento que os outros e gera um feio makefile. Alguns dos mais populares são Cmake, Geléia (Boost Jam pode ser de interesse para C ++) e waf. Alguns sistemas de construção simplesmente geram makefiles, enquanto outros fornecem um sistema de construção completamente novo. Para projetos simples, escrever um Makefile manualmente seria fácil, mas a "verificação de dependência" (para bibliotecas etc.) também teria que ser feita manualmente.

Editar: Brian Gianforcaro Também apontou isso.

Sua pergunta é um pouco geral demais, mas aqui está o que eu recomendaria:

  • Editor: Vim e Emacs são populares. O que mais importa, como na maioria das ferramentas, é dominar uma. Gosto de usar o VIM porque o VI (seu descendente) está disponível em todos os lugares, mas isso pode não ser muito relevante, especialmente se você permanecer no Linux. Qualquer editor de programação está bem.

  • Configure: a menos que você faça grandes projetos, não se preocupe com isso. É um pesadelo usar e depurar. Só faz sentido se você pretende distribuir seu projeto - nesse caso, leia o Autobook: http://sources.redhat.com/autobook/. Como outros disseram, existem alternativas (cmake, scons, etc ...). Estou bastante familiarizado com o Scons e o AutoTools, mas ainda uso o Make for Small (alguns arquivos) projetos.

Em relação à biblioteca compartilhada: é quase o Windows, exceto que você vincula diretamente a biblioteca compartilhada - não há distinção .lib vs .dll no Linux. Por exemplo. Para uma biblioteca foo com uma função foo:

int foo(void)
{
     return 1;
}

Você construiria o seguinte:

gcc -fPIC -c foo.c -o foo.o
gcc -shared foo.o -o libfoo.so

Um principal (é claro na vida real, você colocou a API em um arquivo de cabeçalho):

int foo(void);

int main(void)
{
    foo();
    return 0;
}

E então, você vincula como:

gcc -c main.c -o main.o
gcc main.o -o main -L. -lfoo 

O -l. está aqui para dizer que você deseja que o vinculador procure no diretório atual (ao contrário do Windows, isso nunca é feito por padrão no Linux), o -lfoo diz para o Link contra o Foo da biblioteca.

Então, para começar, eu primeiro apontarei para isso guia Para makefiles, ele também cobre algumas coisas de ligação também.
É apenas algo que meu professor de ciência da computação da universidade nos deu, achei muito claro e conciso, muito útil.

E quanto a um IDE, eu uso eclipse Geralmente porque também lida com o Makefile. Sem mencionar que a compilação e a saída padrão estão à sua ponta dos dedos no programa.
Foi destinado principalmente ao desenvolvimento de Java, mas também há um plug -in C/C ++!

Eu recomendo o livro A arte da programação Unix por ESR. Ele abrange a opção de editor, linguagem de programação etc. Também dá um bom senso para a mentalidade por trás da programação no Unix ou Linux.

Para os editores, você provavelmente deseja vim ou emacs. Ambos são diferentes e qual é melhor é mais um gosto pessoal do que qualquer outra coisa. Eu uso o vim. É ótimo para se mover rapidamente pelo código e fazer alterações. Eu não gostei tanto da EMACS, mas muitas pessoas gostam. O EMACS é extremamente extensível e pode ser usado para tudo, desde um leitor de notícias a um IDE. Experimente os dois e veja o que você gosta.

  • Recomendações para editores de código? Atualmente, estou usando o Nano e ouvi falar de Vim e Emacs, mas não sei quais são os benefícios deles. Existem outros e por que eu os consideraria em algum dos três anteriores? Nota: Não estou procurando um IDE.

Se você estiver usando o Linux com um gerenciador de janelas (KDE, Gnome, etc.), também poderá considerar o uso do editor de texto padrão para o seu gerenciador de janelas. O principal benefício que teria sobre o VIM/EMACS/NANO é que parece mais familiar para alguém proveniente de um ambiente do Windows - um editor escrito para ser executado no gerente da janela possui uma barra de menus, arquivo de abertura/salvar, desfogar/refazer , e muitos outros recursos interessantes que os editores do console provavelmente não conseguem igualar. (Embora Emacs e Vim sejam bastante sofisticados hoje em dia, então quem sabe; P)

No KDE (que é o que eu uso), posso recomendar o KWRITE, que é um editor de texto bem-recursos, mas bastante básico, com destaque de sintaxe; ou Kate, que é um editor de texto mais sofisticado com alguns recursos extras: gerenciamento de sessões, um painel de terminal incorporado, invocação automática de make, e vários plugins, incluindo um visualizador de símbolos C/C ++. Normalmente, uso Kate para o meu trabalho C ++ quando não quero me preocupar em configurar um projeto completo do IDE. (FYI O IDE para KDE é Kdevelo)

Recomendações para editores de código? Atualmente, estou usando o Nano e ouvi falar de Vim e Emacs, mas não sei quais são os benefícios deles. Existem outros e por que eu os consideraria em algum dos três anteriores? Nota: Não estou procurando um IDE.

VI e Emacs são os dois editores do Unix por excelência; Se você estiver definido para usar um editor de texto em vez de um IDE, um deles ou seus derivados (vim, xemacs etc.) é o caminho a percorrer. Ambos suportam o destaque da sintaxe e todos os tipos de recursos, por padrão ou por extensões. A melhor parte desses editores é a extensibilidade que eles oferecem; Emacs por meio de uma variedade de Lisp e Vim por meio de sua própria linguagem de script.

Pessoalmente, uso o Emacs, por isso não posso dizer muito sobre o VIM, mas você deve encontrar muitas informações sobre os dois online. O EMACS tem vários bons tutoriais e referências, incluindo Este.

EDIT [dezembro de 2014]: Parece haver uma tendência de editores cruzados e altamente extensíveis recentemente. Pode ser uma boa escolha se você quiser algo menos que um IDE, mas mais gráfico que VI/Emacs e sensação de nativos em várias plataformas. Eu recomendo olhar para Sublime ou Átomo; Ambos funcionam no Windows/Linux/Mac e têm ótimas comunidades de plugins e temas.

O espaço entre invocar o G ++ diretamente e usar uma corrente de construção do AutoTools é bastante estreito. Seja bom em AutoTools, que é realmente a coisa mais próxima de um 'projeto' disponível no mundo do Linux/Open Source.

Para alguém vindo do Visual Studio, todo esse material de comando pode parecer misterioso e bagunçado. Antes de se transformar em um viciado em shell/vim/emacs, tente algumas ferramentas baseadas em GUI primeiro para ter algum tempo de transição ...

  • Qt 4.5 com seu Mini-ideal QT Creator. Esta é a melhor estrutura, Lightyears antes da competição.
  • Eclipse (C ++) - Da minha experiência com isso no Windows, acho que é surpreendente (este é provavelmente o melhor aplicativo Java já escrito)
  • Kdevelo
  • Anjuta
  • Se você usa Delphi, Lazarus/FreePascal é uma boa alternativa.

Tenho certeza de que os Longhairs zombarão e afirmam que o Vim ou o Emacs lhes dá o melhor e mais rápido ambiente de desenvolvimento, mas traços diferentes para pessoas diferentes. Alguém acostumado a um IDE levará algum tempo para mudar ou pode não querer mudar de forma alguma. Para todas as suas proezas de edição, a criação de aplicativos da GUI certamente não é um trabalho para ferramentas 80x25. Leva anos para se tornar um especialista no lado da linha de comando, é mais uma transformação da visão de mundo do que qualquer outra coisa.

Como uma nota lateral entre as respostas adequadas aqui. Caso você queira acertar o chão como um cara do Windows, eu sugeriria o novo novo Qt Sdk. Vai parecer em casa :-)

Aconselho usar o SCONS no lugar da marca, ele faz o mesmo trabalho, mas é mais fácil de usar e lidar com a caixa como fazer bibliotecas, dependências dinâmicas etc. Aqui está um exemplo da vida real para um simples prog

env = Environment()
env.Append(CCFLAGS='-Wall')
env.Append(CPPPATH = ['./include/'])

env.MergeFlags('-ljpeg')
env.ParseConfig("sdl-config --cflags --libs")
env.ParseConfig("curl-config --cflags --libs")
env.ParseConfig("pkg-config cairo --cflags --libs")

env.Program('rovio-pilot', Glob('./src/*.cpp'))

Como editor de texto, estou feliz com Jedit por codificar, mas é uma questão de gosto.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top