conan C ++ ОШИБКА: не удалось найти пакет в удаленных - PullRequest
1 голос
/ 07 апреля 2020

Я новичок в Конане. Я пытался создать пакет и загрузить в удаленный (myconan-test). Пакет находится в локальном кеше и в удаленном.

Локальный пакет

[user@dev build]$ conan search MyLib*
Existing package recipes:

MyLib/0.1@myself/Testing

Загрузить пакет на удаленный

[user@dev build]$ conan upload MyLib/0.1@myself/testing -r=myconan-test
Uploading to remote 'myconan-test':
Uploading MyLib/0.1@myself/testing to remote 'myconan-test'
Compressing conan_sources.tgz completed [3 files]
Uploading conanmanifest.txt completed [0.24k]
Uploaded conan recipe 'MyLib/0.1@myself/testing' to 'myconan-test': http://xxx.xx.xx.xx:8081/artifactory/api/conan/conan-local

Теперь пакет находится на удаленном

[user@dev build]$ conan search MyLib* -r=myconan-test
Existing package recipes:

MyLib/0.1@myself/testing

Я создал потребительский проект который использует MyLib / 0.1. Но когда я это сделал: conan install .. У меня была ошибка вроде:

MyLib/0.1: Not found in local cache, looking in remotes...
MyLib/0.1: Trying with 'conan-center'...
MyLib/0.1: Trying with 'myconan-test'...
ERROR: Unable to find 'MyLib/0.1' in remotes

Мой conanfile.txt

[requires]
MyLib/0.1

[generators]
gcc
cmake
txt

[imports]
bin, *.a -> ./bin # Copies all dll files from the package "bin" folder to my project "bin" folder

Если я изменил требование на: MyLib / 0. 1@myself/testing. Это работает, потому что он использует пакет в кеше. У меня вопрос, как я могу использовать удаленный пакет. В чем моя ошибка?

Заранее спасибо.

РЕДАКТИРОВАТЬ --- После понимания, как вызвать мой пакет, добавив MyLib / 0. 1@myself/testing. Я могу загрузить пакет с пульта. Но на этапе построения у меня появляется ошибка:

[user@dev build]$ conan build ..
Using lockfile: '/home/user/Projects/consumer_MyLib/build/conan.lock'
Using cached profile from lockfile
conanfile.py: Running build()
-- Conan: called by CMake conan helper
-- Conan: Adjusting output directories
-- Conan: Using cmake global configuration
-- Conan: Adjusting default RPATHs Conan policies
-- Conan: Adjusting language standard
-- Conan: Checking correct version: 4.8
-- Conan: C++ stdlib: libstdc++
**CMake Error at CMakeLists.txt:23 (target_link_libraries):
  Cannot specify link libraries for target "MyLib" which is not built by this
  project.**

CMakeLists.txt

cmake_minimum_required(VERSION 2.8.12)
project(consumer_MyLib CXX)

include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup()

add_executable(${project_name} example.cpp)
target_link_libraries(${project_name}  ${CONAN_LIBS})

Ответы [ 2 ]

2 голосов
/ 07 апреля 2020

Вам не хватает части @user/channel в ваших требованиях:

[requires]
MyLib/0.1@myself/testing

Когда вы загружаете пакеты, вы, вероятно, хотите добавить --all, чтобы убедиться, что вы также загружаете двоичный файл:

conan upload MyLib/0.1@myself/testing -r=myconan-test --all

Проверьте команду upload в документации.

Если вы хотите убедиться, что в вашем кеше нет пакета, выполните conan remove "*" -f

2 голосов
/ 07 апреля 2020

Ссылка на пакет в conanfile.txt объявляется с использованием его имени, версии, пользователя и канала. И пользователь, и канал используются в качестве пространства имен, и они важны для ссылки на пакет. Кроме того, Conan также поддерживает имена пакетов без пространства имен, поэтому мы можем иметь:

zlib/1.2.11
zlib/1.2.11@acme/stable
zlib/1.2.11@acme/testing

Здесь у нас есть 3 пакета, оба связаны с zlib / 1.2.11, но это разные пакеты. Первый не имеет пространства имен, однако это допустимое имя пакета и принадлежит Conan Center Index . Другие 2 пакета предоставляются acme , но имеют разные каналы. Конан видит каждую ссылку на пакет как уникальную, поэтому, если вы указываете zlib/1.2.11 в своем файле conanfile.txt, он будет искать только первый пакет.

Теперь, возвращаясь к вашей ситуации, вы создали пакет MyLib/0.1@myself/Testing, и Команда поиска Conan вернула его при использовании регулярного выражения, что вполне вероятно, потому что это команда поиска. Однако при обращении к пакету в вашем conanfile.txt вы должны использовать полную ссылку, следующую за вашим пакетом:

# conanfile.txt

[requires]
MyLib/0.1@myself/Testing

...

Если вы ищете только MyLib/0.1, Конан примет его как действительную ссылку и не дополнит вашу ссылку. Не существует неявного вывода.

...