Manual
do
Maker
.
com
Pela primeira vez, fiz um programa em Qt usando Windows. Já mostrei como criar um instalador para seu programa em Qt no LInux, até citei alguns modos de criar instalador no Windows, mas sem detalhes.
Não quero revelar detalhes ainda, mas fiz o programa para a comunidade maker. Será gratuito e para um propósito interessante, que vai ajudar bastante em uma tarefa específica, relacionada ao microcontrolador, seja Arduino, ESP, PIC, RPi Pico etc. Acompanhem, teremos vídeo em breve.
O Qt traz uma ferramenta de automação de deploy, chamado windeployqt. O procedimento está descrito na documentação oficial do Qt, só é meio chato de seguir o estilo de leitura, em minha opinião.
Pois é, teremos que usar terminal. Mas nada traumatizante. A execução desse batch é necessária para instalações que usam o QT Installer. Normalmente, ficará em C:\Qt..., onde, ... deve ser algum lugar como:
Na documentação aponta diretamente para bin após QTDIR. Na imagem acima, executei o bash dentro do PowerShell porque não estou acostumado com os comandos do Windows. O bash não está instalado por padrão no Windows e para tê-lo, é necessário configurar o WSL. Não é necessário fazer mais esse setup, apenas localize o arquivo da forma que lhe for conveniente.
O programa windeployqt.exe também estará nesse diretório. Ao executar o batch qtenv2.bat, o caminho será adicionado ao path do sistema, de modo que quando executarmos o programa no diretório da nossa aplicação, o Windows saberá a partir de onde chamar o windeployqt e qualquer dependência relacionada. Após ter localizado o batch, saí do bash para poder executá-lo no terminal do Windows. Pode ser o shell padrão (aquele emulador de DOS que abrimos executando cmd) ou o PowerShell:
Agora que temos o caminho do windeployqt configurado no sistema, podemos entrar no diretório de nossa aplicação para executá-lo.
O windeployqt supre as dependências do executável. Vale citar que esse procedimento é necessário para programas que usam bibliotecas compartilhadas. A outra opção é gerar um binário estático - isto é, que não depende de nenhum recurso externo, pois inclui em si todos os recursos para sua execução. Obviamente isso tem um preço; o programa será maior e se você fizer vários programas estáticos, todos eles terão em si recursos que poderiam ser compartilhados entre eles, através das bibliotecas instaladas no sistema.
Se seu programa usa QML, o programa deve ser executado com o parâmetro --qmldir, de modo que ele usará o qmlimportscanner para procurar pelas relações QML do seu programa. O programa que fiz dessa vez não usa QML.
O comando pode ser executado de qualquer lugar do terminal agora, bastando especificar o caminho da aplicação:
windeployqt caminho_do_seu_binario.exe
No caso, aqui ficou assim, no início das mensagens de saída de execução:
Agora podemos criar o instalador, pois já garantimos que todas as dependências foram supridas.
O instalador pode ser feito de forma semelhante ao desse artigo. De fato, fazer como descrito nesse artigo é um pouco mais trabalhoso, mas é a forma nativa do Qt. Porém, se tratando de Windows, podemos utilizar o famigerado InnoSetup. Link para o instalador.
O InnoSetup tem suporte a encriptação, sugerido durante a instalação do programa. Porém, em alguns países não é permitido sua utilização. Particularmente, não vejo razão para encriptar um programa que será distribuído gratuitamente e optei por não instalar o recurso.
A instalação é no estilo tradicional do Windows: "Next, Next... Finish". Ao final, podemos já abrir o InnoSetup, chamado diretamente pelo instalador.
Se ainda não tem experiência com essa ferramenta (eu não tenho), então use o Wizard, que o guiará durante o processo. A tela do Wizard é essa:
Nessa janela devemos configurar coisas óbvias, não tem o que explicar. Já na janela seguinte, especificamos o caminho de destino da instalação, que por padrão é o Program Files. Nessa mesma janela devemos especificar também o nome do diretório para a aplicação. Mantive com o mesmo nome da aplicação.
Clicando em Next, temos a janela para especificar a origem, que no caso é o diretório da nossa aplicação. Nessa janela podemos também definir se o usuário pode (ou não) executar o programa ao fim da instalação:
A próxima janela importante é a Compiler Settings. Nela, especificamos apenas o nome de saída do instalador e, opcionalmente, um ícone e senha para o instalador:
Após concluir (deixando o resto das janelas como padrão), será gerador um script de definições do InnoSetup, que será usado para gerar o instalador. Mas ao final ele já pergunta se desejamos executar o script de compilação. Confirme.
Ao confirmar, ele perguntará se deseja salvar o script de compilação. É bom para quando formos liberar novas versões do programa, bastando editar os "defines" desse script. Para familiarizá-lo, eis a janela de compilação:
Ao finalizar, vá atéo menu Build e clique em Open Output Folder. Agora é só distribuir!
Adicionalmente, preciso dizer que algumas "caneladas" serão inevitáveis, principalmente na parte de seleção de arquivos e diretórios relacionados ao projeto. Nada que não se resolva observando mensagens de erro na execução da aplicação. Mas como isso não acontece com toda a aplicação, não vale a pena gerar um caso de exemplo.
No próximo artigo devo apresentar o programa em Qt, que está em teste localmente. Assim que for testado por outro maker (ainda estou selecionando), disponibilizo o vídeo e o link para download. Claro, o Qt é multiplataforma e compilarei o mesmo programa para Linux.
Inscreva-se no nosso canal Manual do Maker no YouTube.
Também estamos no Instagram.
Autor do blog "Do bit Ao Byte / Manual do Maker".
Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.