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

Posted

技术标签:

【中文标题】柯南包管理器和 CMakePresets.json?可能吗?【英文标题】:Conan package manager and CMakePresets.json? Is it possible? 【发布时间】:2022-01-23 06:50:12 【问题描述】:

我刚刚开始使用 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 .")

...

提前谢谢你

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

如需进一步讨论,最好在github.com/conan-io/conan提交问题 非常感谢您的建议。每个操作系统都可以使用我自己的工具链吗?我自己启动了默认优化设置,如果我提供工具链而不是使用 target_compile_options “烘焙”,它看起来更干净。无论如何,我似乎必须重新考虑设计,因为现在一团糟。我花了很多时间在构建上,但我还没有写过一个真正的 C++ 代码! ? 是的,如果您使用CMakeToolchain 集成,那么您有[conf],您可以在命令行或更好的配置文件中定义自动注入或完全替换用户工具链。使用conan config list,您可以看到可用的配置,相关的是tools.cmake.cmaketoolchain:user_toolchaintools.cmake.cmaketoolchain:toolchain_file。这都是实验性的,但未来的集成将在 2.0 中继续存在并且已经在 1.X 中,并且已经比以前更灵活。

以上是关于柯南包管理器和 CMakePresets.json?可能吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何在openSUSE Tumbleweed上安装柯南包管理器最正确?

如何不在我的柯南包中包含源文件?

连接柯南包和普通Qt目录

如何正确#include 一个柯南包?

Cmake:使用柯南 pybind11 包

用GoogleTest库编译程序失败,由柯南安装。