Многократное управление conanfile.py - PullRequest
0 голосов
/ 20 марта 2020

Допустим, у меня есть 2 разных файла conanfile.py в проекте, и я вызываю conan install два раза, чтобы установить их зависимости. У меня проблемы при добавлении их в cmake.

Если я использую basi c setup

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

, он включает только последнюю версию. Можно ли включить несколько файлов conanbuildinfo.cmake?

1 Ответ

2 голосов
/ 21 марта 2020

Если у вас есть 2 совершенно разных проекта, вы можете иметь 2 разных conanfiles и поместить сгенерированные файлы в разные папки:

$ conan install conanfile1.py --install-folder=folder1
$ conan install conanfile2.py --install-folder=folder2

Затем в вашем первом проекте:

include(<...>/folder1/conanbuildinfo.cmake)
conan_basic_setup()

А в вашем втором проекте:

include(<...>/folder2/conanbuildinfo.cmake)
conan_basic_setup()

Вам потребуется определить какое-то непротиворечивое соглашение, чтобы найти сгенерированные файлы для каждого проекта.

Обратите внимание, однако, что если разные модули предназначены для Если вы не используете одни и те же зависимости и одни и те же версии, вы, скорее всего, получите ошибки компоновки или времени выполнения в вашем глобальном приложении. Если модули связаны, и вы хотите использовать одни и те же версии зависимостей, то вам определенно нужно использовать только 1 конанфайл со всеми определенными в нем зависимостями.

Обратите внимание, что существуют различные способы определения спецификаций c зависимостей, которые вы хотите, даже если вы используете только 1 конанфайл:

  • Вы можете использовать ЦЕЛИ генератора cmake:
include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup(TARGETS)```

add_library(mylib1 ... <sources>)
target_link_libraries(mylib1 PUBLIC CONAN_PKG::Dep1 CONAN_PKG::Dep2)

add_library(mylib2 ... <sources>)
target_link_libraries(mylib2 PUBLIC CONAN_PKG::Dep3 CONAN_PKG::Dep4)
  • Генераторы cmake_find_package также генерируют один файл findXXXX.cmake для каждого пакета в графе зависимостей. Вы можете использовать find_package(XXXX) и более поздние результаты, указав различные зависимости. Рекомендуется генератор cmake_find_package_multi.
...