柯南包管理器和 CMakePresets.json?可能吗?

Conan package manager and CMakePresets.json? Is it possible?

我刚开始使用 Conan 包管理器。您知道是否可以通过 conanfile.py 中的预设以某种方式调用 cmake?当前的实现如下:

...

def build(self):
    cmake = CMake(self)
    cmake.configure()
    cmake.build()

...

我已经成功地通过以下代码调用了 CMakePresets.json(但它看起来很笨拙 - 我不喜欢它)。

...

    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("Unsupported OS")

    def build(self):
        self.cmake_configure()
        self.run("cmake --build .")

...

提前致谢

Conan 保持与旧 CMake 版本的向后兼容性。即使对于 Conan 2.0,社区已经达成共识 (https://github.com/conan-io/tribe/pull/4) CMake 3.15 是支持的基础,这意味着 Conan 应该默认使用 CMake 3.15(或更新版本)。如果柯南使用cmake预设,cmake>=3.19,那就不满足了。在某些时候,柯南会添加一些工具来管理预设,但目前没有任何内置的东西。

然而,使用预设可能不是必需的,因为 CMakeToolchain 将生成一个 conan_toolchain.cmake 文件来帮助集成(CMake 生成器仍然需要在命令行中传递) .