Agora veremos como
Conan poderá ser útil em projetos de todas as escalas. Para isso, iremos utilizar um exemplo simples, envolvendo:
Embora eu não tenha comentado até aqui, CMake [1] é gerente de para construção de processos, largamente utilizado e bem aceito no mercado. Ele consegue gerar saídas, como Makefile, utilizando uma linguagem de script própria.
Vamos ao nosso exemplo de código:
#include <boost/algorithm/string.hpp>
#include <string>
#include <iostream>
int main() {
const std::string mensagem = "Viva o Linux";
std::cout << boost::algorithm::to_upper_copy(mensagem) << '
';
return 0;
}
Neste exemplo, vemos a utilização da biblioteca Boost para manter a mensagem "Viva o Linux" em caixa alta. A linha 7 realiza cópia da variável "mensagem" e a mesma cópia será data em caixa alta. Ainda na mesma linha, a mensagem será enviada para stdout.
Para que possamos dizer ao Conan a nossa dependência com a Boost, devemos preencher um arquivo de configuração, junto nosso arquivo de código. Este mesmo arquivo deve possuir o nome "conanfile.txt" e também deverá seguir a seguinte estrutura:
[requires]
Boost/1.60.0@lasote/stable
[generators]
cmake
A estrutura vista acima lembra o formato ".INI". A sessão "requires" deverá conter a lista de pacotes de desejamos incluir no nosso projeto. Neste caso, eu adicionei a versão estável da Boost 1.60. Ainda no final, a sessão "generators" indica qual a saída será utilizada, o qual foi optada por CMake.
Lembre-se que na página anterior, há a informação de como busca por pacotes.
Agora que possuímos a receita para o nosso projeto, devemos construir a saída, utilizando o Conan:
conan install .
Uma vez realizado o download dos pacotes, os mesmo estarão disponíveis em "~/.conan/data". Este diretório será usado sempre cache, e cada pacote persistido pode variar por versão de compilador utilizado.
O próximo passo consiste em construir o projeto utilizando CMake. Mas para que isso seja possível, primeiro vamos analisar os artefatos gerados pelo Conan.
O arquivo que teremos interesse neste momento, será o "conanbuildinfo.cmake".
Com isso, podemos utilizar a seguinte receita CMake para o nosso projeto:
cmake_minimum_required(VERSION 2.8)
project(vivaolinux)
include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup()
add_executable(vivaolinux main.cpp)
target_link_libraries(vivaolinux ${BOOST_LIBS})
Esta é uma receita básica do CMake, em mente, tente associar a uma receita de Makefile:
- A linha 4 inclui o arquivo gerado pelo Conan, integrando a receita atual.
- A linha 5 chama função de setup, dentro do arquivo gerado pelo Conan. Este setup carrega as variáveis utilizadas no contexto do CMake.
- Observando a linha 8, a variável "${BOOST_LIBS}" carrega a lista de bibliotecas do projeto Boost. Esta variável será preenchida durante a chamada "conan_basic_setup".
Agora iremos gerar a saída em Makefile, com a ajuda do CMake:
cmake .
make
O programa gerado estará dentro do diretório bin local:
bin/vivaolinux
VIVA O LINUX
Pronto, temos um pequeno projeto em C++, utilizando Boost, sem a necessidade de resolver esta dependência manualmente.
[1]
CMake
Conclusão
Este artigo demonstrou a possibilidade de resolver problemas de dependência por uso de bibliotecas terceiras, utilizando o projeto Conan.
Este gerente de dependência realizou download da biblioteca Boost, já compilada, de acordo com o ambiente e compilador desejado.
Além disso, observamos que existe uma larga lista de bibliotecas suportadas, e tudo é mantido pela comunidade, sendo ainda possível, realizar fork e contribuir com novas receitas para o projeto.
Este projeto corrigiu um antigo problema para os desenvolvedores C/C++, utilizar bibliotecas, sem a necessidade de construir em servidor local, mantendo o mesmo artefato para todos a que utilizam.