conan.io - header 仅包
conan.io - header only package
我正在尝试创建一个简单的演示 header 只有库 称为 foo 并需要它另一个库称为 bar.
foo的结构是这样的:
foo/include/foo.hpp - 只是一个测试 header 文件...
foo/conanfile.py
from conans import ConanFile, CMake
class FooConan(ConanFile):
name = "foo"
version = "0.0.1"
exports = "*"
导出使用:
conan export steazzalini/testing
bar/conanfile.txt
[requires]
foo/0.0.1@steazzalini/testing
[generators]
cmake
柯南安装失败说:
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:
在此先感谢您的帮助!
只是一个小的澄清,我猜你的意思是 foo 是 bar 所必需的。
每个包都必须创建,即使它只是一个 header 库。当您 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
可以添加到食谱中,非常适合仅 header 的图书馆。它可以是 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
更新:柯南文档有一个专门针对 header-only 库的新部分:http://docs.conan.io/en/latest/howtos/header_only.html
我正在尝试创建一个简单的演示 header 只有库 称为 foo 并需要它另一个库称为 bar.
foo的结构是这样的:
foo/include/foo.hpp - 只是一个测试 header 文件...
foo/conanfile.py
from conans import ConanFile, CMake
class FooConan(ConanFile):
name = "foo"
version = "0.0.1"
exports = "*"
导出使用:
conan export steazzalini/testing
bar/conanfile.txt
[requires]
foo/0.0.1@steazzalini/testing
[generators]
cmake
柯南安装失败说:
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:
在此先感谢您的帮助!
只是一个小的澄清,我猜你的意思是 foo 是 bar 所必需的。
每个包都必须创建,即使它只是一个 header 库。当您 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
可以添加到食谱中,非常适合仅 header 的图书馆。它可以是 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
更新:柯南文档有一个专门针对 header-only 库的新部分:http://docs.conan.io/en/latest/howtos/header_only.html