conan.io — только заголовочный пакет

Я пытаюсь создать простую демку только заголовочная библиотека называется Foo и потребовать другую библиотеку под названием бар.

Структура Foo это:

Foo / включать / 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

Конан установить не может сказать:

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:

Заранее спасибо за помощь!

2

Решение

Просто небольшое уточнение, я думаю, вы имели в виду эту библиотеку 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

Но, как правило, в этом нет необходимости, так как вы также можете создать его при вызове установки из потребительского проекта ( бар один):

$ 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

4

Другие решения

Других решений пока нет …