es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Es posible utilizar el administrador de paquetes Conan y el archivo CMakePresets.json?

Acabo de empezar a usar el administrador de paquetes Conan. ¿Sabes si es posible llamar a cmake de alguna manera con los ajustes preestablecidos desde conanfile.py? La implementación actual es la siguiente:

...

<p>def build(self):
cmake = CMake(self)
cmake.configure()
cmake.build()</p>

<p>...
```</p>

He logrado llamar a CMakePresets.json con el siguiente código (pero parece una solución poco elegante, no me gusta).
</code></pre>

...</p>

<pre><code>def cmake_configure(self)
if self.settings.os == "Linux":
self.run("cmake --preset=linux .")
elif self.settings.os == "Macos":
self.run("cmake --preset=macos .")
elif self.settings.os == "Windows":
self.run("cmake --preset=windows .")
else:
raise ConanInvalidConfiguration("Sistema operativo no compatible")

def build(self):
self.cmake_configure()
self.run("cmake --build .")
</code></pre>

...
```

Gracias de antemano

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible llamar a CMake con presets desde conanfile.py. Puedes definir presets en tu conanfile.py y luego pasárselos a CMake como argumentos. Aquí tienes un ejemplo:

    from conans import ConanFile, CMake
    
    class MyLibrary(ConanFile):
    
        settings = "os"
        generators = "cmake"
    
        def config_options(self):
            if self.settings.os == "Windows":
                self.options["cmake"].with_visual_studio = True
    
        def build(self):
            cmake = CMake(self)
            presets = {
                "Windows": "vs2019-x64",
                "Linux": "gcc-x64",
                "Macos": "clang-x64"
            }
            cmake.configure(preset=presets.get(str(self.settings.os)))
            cmake.build()
    

    En este ejemplo, config_options se utiliza para especificar el generador de Visual Studio para Windows. Luego, en build, creamos un objeto CMake y definimos presets como un diccionario que mapea nombres de sistemas operativos a presets de CMake. Luego pasamos el preset apropiado a cmake.configure según la configuración actual del sistema operativo.

    Esto es mucho más limpio y flexible que codificar los nombres de los presets en la función cmake.configure.

Comments are closed.