如何创建一个仅包含CMake源代码并允许消费者包含其CMake源文件的Conan 2.0软件包?

h7appiyu  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(127)

使用Conan v2.0.14和CMake v3.27.8,我想创建一个可重用的“only-CMake-code”Conan包(foo),它可以被另一个CMake项目(bar)使用,并允许在bar项目的CMakeLists.txt中使用include([...])命令,以拉入在foo中定义的CMake模块。
我猜你是(我对柯南完全陌生,但对CMake有很好的了解)要做的就是创建一个合适的CMake包(通过Conan或CMakeLists.txt)为foo生成一个foo-config.cmake文件。这应该允许bar使用find_package(foo REQUIRED)命令查找foo。然后,在foo-config.cmake中定义一个CMake变量文件应该可以在bar中访问,在barCMakeLists.txt中允许以下内容:

include("${foo_ROOT}/foo_module.cmake")

字符串
我当前的fooconanfile.py看起来如下:

from os import path
from conan import ConanFile
from conan.tools.cmake import CMake, CMakeToolchain
from conan.tools.files import copy

required_conan_version = ">=2.0.14"

class Recipe(ConanFile):
    name = "foo"
    version = "latest"

    exports_sources = "tool/cmake/*"
    no_copy_source = True

    def generate(self):
        tc = CMakeToolchain(self)
        tc.generate()

    def package(self):
        cmake = CMake(self)
        cmake.install()

        copy(self, "tool/cmake/*", self.source_folder, self.package_folder)

    def package_info(self):
        self.cpp_info.bindirs = []
        self.cpp_info.libdirs = []


运行conan create会输出以下错误:

cmake.install()
ConanException: build_type setting should be defined.


我确实理解了这个消息,但现在我想也许我选择了错误的方法。我想简单地使用CMake包配置安装foo,但不想关心构建包,工具链,我也不确定foo是否也需要CMakeLists.txt(可能使用额外的install命令),以便通过Conan正确安装。
我已经阅读了相关的问题How to use CMake file provided by a Conan package?及其答案,但它没有帮助我。

4xrmg8kj

4xrmg8kj1#

有几个例子in the docs可能会有用:

如果意图是重用某些脚本,可能不需要执行find_package()并使xxx-config.cmake脚本将模块带入使用,但执行普通的include(myscript)可能更容易,因为像CMakeToolchain这样的工具链会把必要的路径放在正确的变量中,所以这是可行的。(依赖配方必须定义self.cpp_info.builddirs以指向包含脚本的文件夹)

相关问题