C++ conan.io-仅标题包

C++ conan.io-仅标题包,c++,conan,C++,Conan,我正在尝试创建一个名为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 steazza

我正在尝试创建一个名为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
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:

提前感谢您的帮助

只是一个小小的澄清,我想你的意思是bar需要库foo

每个包都必须被创建,即使它是一个只有头的库。当您
conan export
时,它会将源代码复制到配方中(另一种选择是使用
source()
方法来检索源代码),但仍然需要创建包

build()
方法是不必要的,因为没有要构建的内容,但是您应该将
package()
方法添加到您的配方中,例如:

def package(self):
   self.copy("*.h", dst="include", src="include")
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")
然后您必须创建包。这可以通过几种方法完成,其中一种方法是安装foo包:

但这通常不是必需的,因为您也可以在从使用者项目(bar项目)调用安装时构建它:

还有一个选项,
build\u policy
,可以添加到配方中,并且非常适合于仅页眉的库。它可以是
缺失
始终
。当从项目的最新git(master/head..)提交创建包时,后者非常有用。使用此策略,使用者不必显式地调用
--build
来指定必须创建包。因此,配方可能类似于:

def package(self):
   self.copy("*.h", dst="include", src="include")
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新的foo/0.0感兴趣。1@steazzalini/testing-i
命令,该命令将为您创建一个
conanfile.py
,其中包括一些内容。此命令的
-t
选项有助于创建
test\u包
,这是一个用于创建和测试包的实用程序,以确保包是正确的。看看


更新:柯南文档获得了一个只针对头文件的新的部分:

这看起来不象C++。@ SCORTEUNTUNCONAN.IO是C++ ScottHunter的包管理器,它是相对于C++包管理器柯南的。无论如何,我同意最好使用
python
和/或conan(如果它有标记)@steazzalini对其进行标记,即使它只是标题,您仍然需要对其进行打包,请参见: