Как создать динамическую и статическую библиотеку с Conan и MSVS 2017?
Если вы используете CMake + MSVC, вам просто нужно добавить параметр общий . CMake helper переведет эту опцию в определение BUILD_SHARED_LIBS при настройке вашего проекта.
Однако, если вы используете только Visual Studio, это зависит от того, как настроен ваш проект.Conan MSBuild может выбрать то, что вы хотите, включая цель, архитектуру и тип сборки.Вы можете использовать разные цели, по одной для каждой конфигурации.
Как выбрать библиотеку, на которую я ссылаюсь, когда в пакете есть несколько файлов .lib?
По параметрам.При создании пакета Conan экспортирует все нужные вам имена библиотек с помощью self.cpp_info.libs .Вы можете вызвать tools.collect_libs (self) , который выведет список всех библиотек в папке пакета или вы можете указать то, что вам нужно, например [library_st, library].Если вам нужно выбрать библиотеку, которую вы хотите связать, вам нужно добавить опцию с библиотекой, которая должна быть в списке, в противном случае вам нужно будет игнорировать 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"]
IMOВы пытаетесь построить два проекта в одном пакете, что звучит неправильно.Я бы сказал, что вы должны создавать отдельные пакеты для каждого.Вы можете создать один индивидуальный рецепт для каждого проекта.Следует помнить, что каждая опция вводит новую точку для идентификатора пакета.