我正在尝试创建一个简单的仅演示标头的名为foo的库,并要求它另一个名为bar的库。
foo的结构是这样的:
foo / include / foo.hpp-只是一个测试头文件...
foo / conanfile.py
from conans import ConanFile, CMake
class FooConan(ConanFile):
name = "foo"
version = "0.0.1"
exports = "*"
Run Code Online (Sandbox Code Playgroud)
使用以下命令将其导出:
conan export steazzalini/testing
Run Code Online (Sandbox Code Playgroud)
bar / conanfile.txt
[requires]
foo/0.0.1@steazzalini/testing
[generators]
cmake
Run Code Online (Sandbox Code Playgroud)
柯南安装失败说:
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:
Run Code Online (Sandbox Code Playgroud)
在此先感谢您的帮助!
只需稍作说明,我想您是说bar需要库foo。
每个包都必须创建,即使它是仅标头的库也是如此。当您conan export将源代码复制到配方中时(另一种选择是使用该source()方法来检索源代码),但是仍然必须创建包。
该build()方法不是必需的,因为没有什么要构建的,但是您应该将该package()方法添加到您的配方中,例如:
def package(self):
self.copy("*.h", dst="include", src="include")
Run Code Online (Sandbox Code Playgroud)
然后,您必须创建包。这可以通过几种方法来完成,一种方法是安装foo软件包:
$ conan install foo/0.0.1@steazzalini/testing --build
Run Code Online (Sandbox Code Playgroud)
但这通常不是必需的,因为您还可以在从使用者项目调用安装时(第一个小节)来构建它:
$ conan install . --build
Run Code Online (Sandbox Code Playgroud)
还有一个选项,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")
Run Code Online (Sandbox Code Playgroud)
最后,您可能对$ 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
更新:柯南文档新增了专门针对仅标头库的部分:http : //docs.conan.io/en/latest/howtos/header_only.html