Как сделать ссылку только на некоторые библиотеки в пакете Conan?

Я собираюсь начать использовать Конан менеджер пакетов для управления сторонними зависимостями моих C ++ проектов, но я не могу найти, как связать только некоторые библиотеки в Конан пакет. я использую CMake как сборка системы и я использую Конан мультиконфигурация CMake генератор: cmake_multi.

Следуя примеру в документации, у меня есть этот код:

project(FoundationTimer)
cmake_minimum_required(VERSION 2.8.12)

set(TARGET_NAME timer)

include(${CMAKE_BINARY_DIR}/conanbuildinfo_multi.cmake)
conan_basic_setup(TARGETS)

add_executable(${TARGET_NAME} timer.cpp)
target_link_libraries(${TARGET_NAME} CONAN_PKG::Poco)

в моем CMakeLists.txt,

После создания решения с CMake:

conan install -g cmake_multi -s build_type=Debug -s compiler.runtime=MDd ..\mytimer\
conan install -g cmake_multi -s build_type=Release -s compiler.runtime=MD ..\mytimer\
cmake ..\mytimer\ -G "Visual Studio 14 2015 Win64"

это создает зависимости для всех библиотек в Конан пакет и все библиотеки в другом Конан пакеты к которым Poco Конан пакет зависит как OpenSSL а также Zlib.

Дополнительные зависимости в Visual Studio Параметры проекта для конфигурации отладки установлены на:

C:\Users\ivan.bobev\.conan\data\Poco\1.7.8p3\pocoproject\stable\package\67348df82fcd362bbf088991f95bb229be582635\lib\PocoUtilmdd.lib
C:\Users\ivan.bobev\.conan\data\Poco\1.7.8p3\pocoproject\stable\package\67348df82fcd362bbf088991f95bb229be582635\lib\PocoMongoDBmdd.lib
C:\Users\ivan.bobev\.conan\data\Poco\1.7.8p3\pocoproject\stable\package\67348df82fcd362bbf088991f95bb229be582635\lib\PocoNetmdd.lib
C:\Users\ivan.bobev\.conan\data\Poco\1.7.8p3\pocoproject\stable\package\67348df82fcd362bbf088991f95bb229be582635\lib\PocoNetSSLWinmdd.lib
C:\Users\ivan.bobev\.conan\data\Poco\1.7.8p3\pocoproject\stable\package\67348df82fcd362bbf088991f95bb229be582635\lib\PocoCryptomdd.lib
C:\Users\ivan.bobev\.conan\data\Poco\1.7.8p3\pocoproject\stable\package\67348df82fcd362bbf088991f95bb229be582635\lib\PocoDatamdd.lib
C:\Users\ivan.bobev\.conan\data\Poco\1.7.8p3\pocoproject\stable\package\67348df82fcd362bbf088991f95bb229be582635\lib\PocoDataSQLitemdd.lib
C:\Users\ivan.bobev\.conan\data\Poco\1.7.8p3\pocoproject\stable\package\67348df82fcd362bbf088991f95bb229be582635\lib\PocoZipmdd.lib
C:\Users\ivan.bobev\.conan\data\Poco\1.7.8p3\pocoproject\stable\package\67348df82fcd362bbf088991f95bb229be582635\lib\PocoXMLmdd.lib
C:\Users\ivan.bobev\.conan\data\Poco\1.7.8p3\pocoproject\stable\package\67348df82fcd362bbf088991f95bb229be582635\lib\PocoJSONmdd.lib
C:\Users\ivan.bobev\.conan\data\Poco\1.7.8p3\pocoproject\stable\package\67348df82fcd362bbf088991f95bb229be582635\lib\PocoFoundationmdd.lib
C:\Users\ivan.bobev\.conan\data\OpenSSL\1.0.2l\conan\stable\package\b17b520b4b55729a7391c6b2d20631fec4cf1564\lib\ssleay32.lib
C:\Users\ivan.bobev\.conan\data\OpenSSL\1.0.2l\conan\stable\package\b17b520b4b55729a7391c6b2d20631fec4cf1564\lib\libeay32.lib
C:\Users\ivan.bobev\.conan\data\zlib\1.2.11\conan\stable\package\c32596dcd26b8c708dc3d19cb73738d2b48f12a8\lib\zlibd.lib

Можно ли ссылаться только на определенные библиотеки в пакете Poco?

Я пытался явно перечислить только библиотеки, с которыми я хочу связать следующим образом:

target_link_libraries(${TARGET_NAME}
debug PocoFoundationmdd optimized PocoFoundationmd
debug PocoUtilmdd optimized PocoUtilmd)

Но после этого путь к Lib файлы не установлены должным образом, и не включают каталоги для Poco пакет.

Я использую последние Конан версия 0.25.1.

3

Решение

Я думаю, что лучше всего было бы отфильтровать или определить необходимые библиотеки перед вызовом шага установки. Что-то вроде:

include(${CMAKE_BINARY_DIR}/conanbuildinfo_multi.cmake)
# Just the libraries you want
set(CONAN_LIBS_POCO PocoUtilmd PocoMongoDBmd PocoFoundationmd ws2_32 Iphlpapi.lib)
conan_basic_setup(TARGETS)

Обратите внимание, что существуют некоторые другие системные библиотеки и что имена библиотек могут различаться в разных ОС и для разных конфигураций. Так что, вероятно, лучше отфильтровать (что-то вроде этого, не проверено):

include(${CMAKE_BINARY_DIR}/conanbuildinfo_multi.cmake)
set(_my_poco_libs)
foreach(_library IN ${CONAN_LIBS_POCO})
if(NOT ${_library} MATCHES "yourRegexToDiscardUnwantedLibs")
list(APPEND _my_poco_libs ${_library})
endif()
enforeach()
set(CONAN_LIBS_POCO ${_my_poco_libs})
conan_basic_setup(TARGETS)

Обратите внимание, что include() из сгенерированного conanbuildinfo.cmake файл «пассивен», он не должен делать ничего, кроме объявления переменных CONAN_XXX. Таким образом, вы можете манипулировать ими в любом случае, прежде чем приступить к настройке сборки. conan_basic_setup() делает, он переводит эти переменные в cmake.

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

3

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

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