Como parte da minha pesquisa, escrevo muitos códigos Python e MATLAB que nunca precisam ser distribuídos a mais ninguém. Mesmo que eu precise distribuir meu software, Python e MATLAB, ambos sendo interpretados, tornam o compartilhamento relativamente simples.
Agora estou escrevendo algum software em C ++ que gostaria de distribuir. Eu sei como compilar o software em minha própria máquina, mas o que não entendo é o que precisa ser feito para fornecer o software a outras pessoas.
Primeiro, mais sobre o meu projeto: estou escrevendo um código para calcular e exibir visualizações. O projeto é baseado em gráficos e, portanto, estou usando a biblioteca de gráficos LEMON. Estou explorando as implementações VTK e OpenGL com o objetivo de exibir a visualização. Gostaria de escrever ligações Python e MATLAB para que os usuários desses ambientes pudessem usar meu software e gostaria de produzir versões para Windows e Linux (ainda não pensei no OS X ...).
Então, vamos dar como exemplo a biblioteca de gráficos LEMON. É um monte de cabeçalhos, juntamente com um pequeno objeto compartilhado. No meu sistema de desenvolvimento, compilo a biblioteca com o CMake e a vinculo ao meu projeto.
Agora diga que quero dar meu software a alguém executando no Windows. Quero que eles possam baixar um instalador, clicar em um ou dois botões e ter tudo resolvido. Não quero que eles se preocupem com a instalação da biblioteca LEMON ou OpenGL. Eles não deveriam ter que compilar nada conscientemente. Isso é possível?
Tenho a sensação de que é, mas falho quando procuro referências. Eu tenho uma vaga idéia de que, se eu compilar um binário no Windows, devo poder distribuí-lo a qualquer pessoa executando um sistema operacional Windows. Mas e as bibliotecas que eu uso? Acho que preciso vinculá-los estaticamente no Windows, e isso resolverá o problema de dependência. Mas, no fundo, eu li que vincular estaticamente não é uma boa prática (ou é apenas no Linux?)
Como você pode ver, estou um pouco perdido. Eu apreciaria uma cutucada na direção certa e algumas referências para ler, se você souber de alguma!
Respostas:
Enquanto a licença das bibliotecas VTK permitir, você poderá escrever um script do NSIS Installer (que criará um instalador redistribuível) que instalará as bibliotecas VTK no modo silencioso. O modo silencioso (se o instalador do VTK tiver isso) instalará as bibliotecas sem solicitar ao usuário qualquer entrada - é assim que a maioria dos instaladores de videogames funciona (o software necessário é instalado sem solicitar que você concorde com os termos de uso ou onde instalar isto).
No entanto, apenas a instalação cega de software extra pode deixá-lo em uma posição legal precária. Não tenho muita certeza da legalidade disso, mas acho que você deve informar o usuário de todo o software extra que está prestes a instalar na máquina.
Como exemplo, um dos instaladores em que escrevi (para um produto em que trabalho) exige que o SQL Server 2005 seja instalado juntamente com o binário. No script de instalação, se a máquina do usuário não tiver a versão exigida do SQL Server (ou posterior) instalada, ele chamará o arquivo MSI do SQL Server 2005 (empacotado no instalador do NSIS) com a opção / q. Isso instala o servidor SQL com as configurações padrão e tudo que o usuário vê é o prompt "instalando o SQL Server 2005" que é exibido enquanto o MSI faz seu trabalho. Fazemos questão de informar o usuário sobre isso e dar a ele a opção de instalar nosso software sem ele.
Você pode criar uma marca que criará todas as suas bibliotecas para você e, em seguida, chame o construtor de scripts NSIS, mas não tenho certeza. Eu não olhei tão longe no buraco do coelho para o NSIS, pois não estamos automatizando as compilações do instalador.
Obviamente, você pode substituir o NSIS por qualquer outro ambiente de script do instalador. Eu só usei aqui como exemplo, porque tenho um pouco de experiência com ele.
fonte