Как создать динамическую и статическую библиотеки с Conan и MSVS 2017?
Если вы используете CMake + MSVC, вам просто нужно добавить вариант общий. Помощник CMake переведет этот параметр на < em> BUILD_SHARED_LIBS при настройке вашего проекта.
Однако, если вы используете только Visual Studio, это зависит от того, как настроен ваш проект. Конан MSBuild может выбрать то, что вы хотите, включая цель, архитектуру и тип сборки. Вы можете использовать разные цели, по одной для каждой конфигурации.
Как выбрать библиотеку, на которую я буду ссылаться, если в пакете есть несколько файлов .lib?
По опциям. При создании пакета Конан экспортирует все нужные вам имена библиотек в self.cpp_info.libs. Вы можете вызвать tools.collect_libs (self), который выведет список всех библиотек в папке пакета, или вы можете указать то, что хотите, например [library_st, библиотека]. Если вам нужно выбрать, какую библиотеку вы хотите связать, вам нужно добавить параметр с библиотекой, которая будет отображаться в списке, в противном случае вам нужно будет игнорировать CONAN_PKG :: или CONAN_LIBS при связывании:
from conans import Conanfile, MSBuild
class ExampleConan(Conanfile):
name = "example"
version = "0.1.0"
settings = "os", "arch", "build_type", "compiler"
options = {"shared": [True, False], "st": [True, False]}
default_options = {"shared": False, "st": False}
exports = "*"
_msvc_archs = {"x86": "x86", "x86_64": "x64"}
def build(self):
msbuild = MSBuild(self)
msbuild.build("Example.sln", platforms=self._msvc_archs)
def package(self):
library_folder = os.path.join(self._msvc_archs[self.settings.arch.value], self.settings.build_type.value)
self.copy("*.lib", src=library_folder, dst="lib")
if self.options.shared:
self.copy("*.dll", src=library_folder, dst="bin")
def package_info(self):
self.cpp_info.libs = ["library_st"] if self.options.st else ["library"]
ИМО, вы пытаетесь создать два проекта в одном пакете, что звучит неправильно. Я бы сказал, что вам следует создавать отдельные пакеты для каждого из них. Вы можете создать один индивидуальный рецепт для каждого проекта. Вы должны помнить, что каждая опция вводит новую точку для идентификатора пакета.
person
uilianries
schedule
24.04.2019