使用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
中访问,在bar
的CMakeLists.txt
中允许以下内容:
include("${foo_ROOT}/foo_module.cmake")
字符串
我当前的foo
的conanfile.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?及其答案,但它没有帮助我。
1条答案
按热度按时间4xrmg8kj1#
有几个例子in the docs可能会有用:
requires
,see this docs的宏docs.conan.io/2/examples/graph/requires/.如果意图是重用某些脚本,可能不需要执行
find_package()
并使xxx-config.cmake脚本将模块带入使用,但执行普通的include(myscript)
可能更容易,因为像CMakeToolchain
这样的工具链会把必要的路径放在正确的变量中,所以这是可行的。(依赖配方必须定义self.cpp_info.builddirs
以指向包含脚本的文件夹)