Conan, el administrador de paquetes y dependencias para C y C++, liberó la
versión 2.0.0
en febrero 21 de 2023 incluyendo varios cambios relevantes con
respecto a la versión anterior 1.X
, algunos con los cuales se requirió
actualizar los paquetes, pues no eran compatibles con la siguiente versión.
cmake-conan
es un proveedor de dependencias para usar Conan en CMake.
También ha sido actualizado para funcionar con Conan 2.X
a partir de la versión
2.0.5
, desde CMake 3.24
.
Para integrar CMake con la versión 1.X
de conan usando cmake-conan hace falta
modificar el archivo CMakeLists.txt
con algunas instrucciones adicionales,
como se planteaba en la publicación
Conan como administrador de paquetes.
Para conan 2.X
es mucho más sencillo y directo, solo hay que tener en cuenta
algunas consideraciones, y el uso de find_package()
es transparente.
Configuración
No obstante, puede haber algunas configuraciones requeridas para hacerlo funcionar la primera vez.
Uno de los retos que tuve fue la actualización a Ubuntu 24. Teniendo en cuenta que conan es instalado desde python, Ubuntu 24 requiere crear un python virtual environment y sobre éste instalar conan.
El primer reto es realizar esta instalación y tener en cuenta la ruta absoluta del ambiente virtual de python1 en el que se instala conan.
El segundo es el cambio de generators y layouts de conan definidos en el
conanfile que puede ser un script .py
, o un archivo de texto .txt
.
El tercero es el uso de cmake-conan, que requiere descargar el archivo
conan_provider.cmake
.
Con todo la anterior listo (y con cmake > 3.24
) solo basta definir la variable
CMAKE_PROJECT_TOP_LEVEL_INCLUDES
apuntando a la ruta absoluta hacia el archivo
conan_provider.cmake
, y elegir el CMAKE_BUILD_TYPE
para que un proyecto que
use find_package()
funcione integrando cmake, conan, y el paquete a usar. Si
el build type es debug entonces también hará falta validar que exista un
perfil de conan con esa misma configuración, ya que el perfil predeterminado
es de tipo release.
Ejemplo usando fmt
Para este ejemplo de uso de fmt 11.2.0
manejado por conan 2, usando
cmake-conan, se requieren los siguientes archivos:
-
CMakeLists.txt
cmake_minimum_required(VERSION 3.24) project(hello_fmt_cpp VERSION "1.0.0" DESCRIPTION "fmt 11 con conan-cmake" LANGUAGES CXX ) add_executable(${PROJECT_NAME} main.cpp) find_package(fmt REQUIRED) target_include_directories(${PROJECT_NAME} SYSTEM PRIVATE ${fmt_INCLUDE_DIRS}) target_link_libraries(${PROJECT_NAME} PRIVATE ${fmt_LIBRARIES})
-
conanfile.txt
[requires] fmt/11.2.0 [generators] CMakeDeps [layout] cmake_layout
-
main.cpp
#include <fmt/core.h> int main() { fmt::print("Hola fmt 11 con cmake-conan 2.X\n"); }
-
Descargar el archivo
conan_provider.cmake
desde github:wget https://raw.githubusercontent.com/conan-io/cmake-conan/refs/heads/develop2/conan_provider.cmake
Compilación
Con esos cuatro archivos en el directorio local ya se puede proceder a compilar,
teniendo en cuenta que hay que definir las variables CMAKE_BUILD_TYPE
y
CMAKE_PROJECT_TOP_LEVEL_INCLUDES
:
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_PROJECT_TOP_LEVEL_INCLUDES=/ruta-a/conan_provider.cmake
cmake --build .
Al finalizar exitosamente se puede ejecutar el programa:
./hello_fmt_cpp
Obteniendo:
Hola fmt 11 con cmake-conan 2.X
Para CLion
Adicional a lo anterior, para CLion hace falta indicarle dónde está instalado
conan, es decir, la ruta al virtual environment de python en el que se
encuentra el paquete de conan 2.X
. Para hacerlo hay que ir a:
Settings> Build> CMake: CMake options
y agregar las siguientes opciones:
-DCMAKE_PROJECT_TOP_LEVEL_INCLUDES="/ruta/a/conan_provider.cmake"
-DCONAN_COMMAND="/ruta/a/.venv/bin/conan"
Así, CLion podrá configurar el perfil usado (debug o release) para funcionar
con conan, siempre y cuando encuentre un archivo conanfile
en la raíz del
proyecto, y el archivo conan_provider.cmake
.
También es posible usar directamente el plugin de conan2 quien se
encargará de descargar el archivo provider
. Hará falta indicarle solamente
la ruta del ambiente virtual de python, y permitirá ver información de paquetes
directamente desde el plugin.
Fuentes
- Documentación oficial de Conan 2
- Conan en CLion
- Conan 2.X en CMake
- cmake-conan
Deja un comentario