在这种情况下,创建一个完整的Conan配方,并详细检索二进制文件可能是首选方法,因为它是可复制的,并且可以跟踪原始二进制文件。为此,请遵循我们的样品配方:
class HelloConan(ConanFile):
name = "hello"
version = "0.1"
settings = "os", "compiler", "build_type", "arch"
def build(self):
if self.settings.os == "Windows" and self.settings.compiler == "Visual Studio":
url = ("https://<someurl>/downloads/hello_binary%s_%s.zip"
% (str(self.settings.compiler.version), str(self.settings.build_type)))
elif ...:
url = ...
else:
raise Exception("Binary does not exist for these settings")
tools.get(url)
def package(self):
self.copy("*") # assume package as-is, but you can also copy specific files or rearrange
def package_info(self): # still very useful for package consumers
self.cpp_info.libs = ["hello"]
通常,预编译的二进制文件用于不同的配置,因此build()
方法必须实现的唯一任务是将 settings
映射到不同的URLs。
:::info Note
- 这是一个标准的Conan包,即使二进制文件正在从其他地方检索。推荐的方法 是使用
conan create
,并在上述配方之外包括一个小型消费项目,在本地测试,然后继续将带有二进制文件的conan upload
到 Conan remote,并上传Conan。 - 同样的构建政策适用。如果未创建任何Conan包,并且未定义
--build
参数,则配方失败。这种包的典型方法可能是定义build_policy="missing"
,尤其是当url也在团队控制下时。如果它们是外部的 (在互联网上),最好创建包并将其存储在您自己的Conan服务器上,以便构建不依赖于第三方URL可用。 :::