柯南包管理器和 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_toolchain
和tools.cmake.cmaketoolchain:toolchain_file
。这都是实验性的,但未来的集成将在 2.0 中继续存在并且已经在 1.X 中,并且已经比以前更灵活。以上是关于柯南包管理器和 CMakePresets.json?可能吗?的主要内容,如果未能解决你的问题,请参考以下文章