如何用柯南和MSVS 2017创建动态和静态库?
如果您使用的是 CMake + MSVC,则只需添加 optionshared。 CMake helper 将在配置您的项目时将该选项转换为 BUILD_SHARED_LIBS 定义。
但是,如果您仅使用 Visual Studio,则取决于您的项目的配置方式。 ConanMSBuild 能够选择你想要的,包括目标、架构和构建类型。您可以使用不同的目标,每个配置一个。
当包中有多个.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"]
IMO 您试图在同一个包中构建两个项目,这听起来不对。我会说你应该为每一个创建单独的包。您可以为每个项目创建一个单独的配方。您应该记住,每个选项都会为包 ID 引入一个新点。