我正在尝试创建一个名为 foo 的简单演示标题库,并要求另一个名为 bar 的库。
foo 的结构是:
foo / include / foo.hpp - 只是一个测试标题文件......
富/ conanfile.py
from conans import ConanFile, CMake
class FooConan(ConanFile):
name = "foo"
version = "0.0.1"
exports = "*"
使用以下方式导出:
conan export steazzalini/testing
酒吧/ conanfile.txt
[requires]
foo/0.0.1@steazzalini/testing
[generators]
cmake
conan install 无法说:
ERROR: Can't find a 'foo/0.0.1@steazzalini/testing' package for the specified options and settings
- Try to build from sources with "--build foo" parameter
- If it fails, you could try to contact the package author , report your configuration and try to collaborate to support it.
Package configuration:
- Settings:
- Options:
提前感谢您的帮助!
答案 0 :(得分:5)
只是一个小小的澄清,我想你的意思是 bar 需要库 foo 。
每个包都必须创建,即使它只是一个标题库。当您conan export
它将源代码复制到配方中时(另一种选择是使用source()
方法来检索源代码),但仍然必须创建包。
没有必要使用build()
方法,因为无需构建,但您应该将package()
方法添加到您的食谱中,例如:
def package(self):
self.copy("*.h", dst="include", src="include")
然后你必须创建包。这可以通过几种方法完成,一种是安装 foo 包:
$ conan install foo/0.0.1@steazzalini/testing --build
但这通常不是必需的,因为您也可以在从消费者项目( bar )调用安装时构建它:
$ conan install . --build
还有一个选项,build_policy
可以添加到食谱中,非常适合仅限标题的库。它可以是missing
或always
。从项目的最新git(master / head ..)提交创建包时,后者非常有用。使用此策略,消费者不必明确地调用--build
来指定必须创建包。所以配方可能是这样的:
from conans import ConanFile, CMake
class FooConan(ConanFile):
name = "foo"
version = "0.0.1"
exports = "*"
build_policy = "missing"
def package(self):
self.copy("*.h", dst="include", src="include")
最后,您可能对$ conan new foo/0.0.1@steazzalini/testing -i
命令感兴趣,该命令将为您创建一个conanfile.py
,其中包含一些这些内容。此命令的-t
选项对于创建test_package
(用于创建和测试包的实用程序)以确保包正确非常有用。看看http://docs.conan.io/en/latest/packaging/testing.html#automatically-creating-and-testing-packages
更新:conan docs获得了一个专门针对标题库的新部分:http://docs.conan.io/en/latest/howtos/header_only.html