thiagowfx's avatar

¬ just serendipity 🍀 (not just serendipity)

Integrando QT Creator com cmake

• 761 words • 4 min • updated

⚠️ This post is over one year old. It may no longer be up to date or relevant. Opinions may have changed.
Table of Contents

TL;DR: movendo o estilo de desenvolvimento de Emacs + programa na linha de comando para QT Creator + programa com interface gráfica (em…QT, é claro!).

Existem basicamente duas etapas para realizar essa transição. A primeira é tão ridiculamente fácil, que nem precisaria ficar registrada aqui. Apesar disso, não parece ser tão trivial ou que vá funcionar out-of-the-box, então vou documentá-la aqui assim mesmo.

Já a segunda requer um pouco de entendimento sobre como o cmake e o qmake (ferramenta de gerenciamento de compilação utilizada pordefault por um projeto do QT Creator) funcionam.

  • OBS.: QT5. Mas, você também pode aplicar o que está escrito aqui para QT4. Com alguns cuidados.

Primeira etapa #

1-) Assegure-se de que o seu projeto em cmake funciona corretamente. A estrutura atual dele deverá ser similar à seguinte:

  • ProjectTopLevelDir/

  • ProjectTopLevelDir/CMakeLists.txt(arquivo top-level de configuração do cmake)

  • ProjectTopLevelDir/src/ (código-fonte do projeto)

  • ProjectTopLevelDir/build/ (onde o projeto é compilado)

Existe uma variação comum para o caminho de build:

  • ProjectTopLevelDir/../build/

Tanto faz a variação adotada. No entanto, ao utilizarmos o QT Creator, o wizardde importação de projeto nos recomendará a segunda, pordefault.

2-) Abra o QT Creator, clique em Open File or Project, e importe o CMakeLists.txt indicado no item anterior. É importante importar o CMakeLists.txt mais top-level do seu projeto.

3-) A pasta de build especificada pode ser a mesma que a anterior. Ou, você pode adotar o padrão sugerido pelo wizard, que é algo do tipo ProjectTopLevelDir-build/(a segunda variação, como eu disse anteriormente).

4-) Clique em “Run CMake”. Você provavelmente irá querer o “Unix Generator (Desktop)”.

5-) Sente-se e espere a mágica acontecer. Brincadeira, não é mágica, na verdade é um comportamento muito bem definido. O que o Qt Creator faz behind-the-scenesé, basicamente, rodar o cmake para gerar um .cbp (output de projeto para o Code::Blocks, mas que o Qt Creator sabe interpretar também – thank you!), em vez de um usual Makefile. Esse .cbp configura o ambiente do Qt Creator para o seu novo projeto.

6-) Clique em Finish.

Segunda etapa - preliminares #

Agora você vai notar que o botão de “play” (Run, atalho Control-R) construirá o seu projeto corretamente e, provavelmente, também rodará o executável correto. Isso indica o fim da primeira parte.

Se você realizar quaisquer modificações significativas no seu projeto (no que diz respeito à estrutura dele, ou algum CMakeLists.txt), assegure-se de rodar o CMake novamente. Você pode fazer isso clicando com o botão direito no projeto (na sidebar da esquerda) e depois em “Run CMake”.

E daí você percebe que especificar etapas em linha de comando é algo bem mais fácil e preciso do que especificar etapas em uma IDE. Além do mais, daqui a algumas versões, a interface do Qt Creator pode mudar, e o que eu acabei de descrever aqui terá de ser reaprendido / readaptado. Use o bom senso.

Muito bem, na segunda etapa dispensaremos completamente a ferramenta qmake, passando a utilizar somente o **cmake.**Assumiremos que você quer criar uma interface em Qt. Se você só quiser utilizar o QT Creator, sem criar nenhuma interface, então você pode parar na etapa 1.

Segunda etapa - agora sim #

1-) Abra o seu CMakeLists.txt top-level num editor de texto. Pode ser no próprio Qt Creator, ou não, tanto faz.

2-) Vá para o final desse arquivo. Vamos adicionar as seguintes instruções lá:

https://gist.github.com/thiagowfx/10549532

3-) Comentários:

  • Note que essa é a instrução de um dos meus projetos. Toda a parte onde contém “raytracer” você deve mudar de acordo com o seu próprio projeto.

  • A parte do automocé essencial se você utiliza signals e slots.

  • A parte do wrap_ui é essencial se você utiliza o Qt Designer para criar um arquivo .ui. Se você criou o seu código “na mão”, não precisa. O que a wrap_ui faz é invocar o uic(ui compiler) do Qt nos arquivos .ui especificados. Isso é exatamente o que o qmake fazbehind-the-scenes(assim como a parte do moc, descrita no item anterior).

  • Se você utiliza *resources,*também é necessário adicionar uma instrução para isso. Ela não existe no meu exemplo. Olhe as referências no fim desse post.

  • Depois de criar quaisquer executáveis, é importante linká-los com a biblioteca do Qt. É para isso que a parte use_modules serve.

Depois disso, o seu projeto está sendo completamente gerenciado pelo **cmake.**Sem necessidade de qmake.

Referências #

  • Sugiro olhar o meu repositório no Github, open-bookmarks. Olha a parte que fala de cmake com qt5. Vou deixar uma cópia dessas referências aqui, no entanto, se eu adicionar quaisquer referências no futuro, elas serão adicionadas no repositório, e não nesse post.

Referências: