名侦探柯南.IO头唯一的包

conan.io - header only package

本文关键字:唯一 IO 名侦探柯南      更新时间:2023-10-16

我正在尝试创建一个简单的演示头仅库名为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 = "*"

导出:

conan export steazzalini/testing

酒吧/conanfile.txt

[requires]
foo/0.0.1@steazzalini/testing
[generators]
cmake

conan install failed:

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:

提前感谢您的帮助!

只是一个小小的澄清,我猜你的意思是库foobar所需要的。

必须创建每个包,即使它只是一个头库。当您使用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
但这通常是不必要的,因为您也可以在从消费者项目调用安装时构建它(一个):
$ conan install . --build

还有一个选项,build_policy可以添加到菜谱中,并且非常适合头文件库。missingalways。后者在从项目的最新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文档得到了一个专门针对头文件库的新章节:http://docs.conan.io/en/latest/howtos/header_only.html