使用conan打包预先存在的二进制文件的多个配置

时间:2017-07-19 22:25:53

标签: conan

我有一组第三方二进制文件,我试图将其放入一个conan包中。二进制文件位于构建配置的文件夹中:Linux32,Win32,Win64,Win32。

我已经能够使用以下conanfile.py为Win64配置生成一个conan包:

from conans import ConanFile

class LibNameConan(ConanFile):
    name = "LibName"
    version = "1.1.1"
    settings = "os", "compiler", "build_type", "arch"
    description = "Package for LibName"
    url = "None"
    license = "None"

    def package(self):
        self.copy("*", dst="lib", src="lib")
        self.copy("*.c", dst="include", src="include", keep_path=False)

    def package_info(self):
        self.cpp_info.libs = self.collect_libs()

我在powershell中运行以下命令:

conan install
mkdir pkg
cd pkg
conan package .. --build_folder=../
cd ..
conan export name/testing
conan package_files libname/1.1.1@name/testing

对于Win64,这可以按预期工作。当我用Win32二进制文件重复这些步骤时,我没有得到包的不同哈希值。

我试过跑:

conan install -s arch=x86

但是,这仍会导致包具有与x86_64配置相同的哈希值。

如何设置配置以从预先存在的二进制文件生成包?

1 个答案:

答案 0 :(得分:5)

如果您只是打包预先构建的二进制文件,那么没有package()方法就可以了,只有在从配方构建时才有意义:

from conans import ConanFile

class LibNameConan(ConanFile):
    name = "LibName"
    version = "1.1.1"
    settings = "os", "compiler", "build_type", "arch"
    description = "Package for LibName"
    url = "None"
    license = "None"

    def package_info(self):
        self.cpp_info.libs = self.collect_libs()

除非有一些重要的原因要包装源代码,否则您是否希望它们能够调试依赖项?在这种情况下,请将其条件设置为build_type

然而,这可能与您的问题无关。由于您的软件包没有依赖关系且您也没有使用任何生成器,因此您不需要conan install,并且您在那里使用的设置无效。

您必须在package_files

时指定二进制配置的设置
$ conan package_files libname/1.1.1@name/testing # using your default config
$ conan package_files libname/1.1.1@name/testing -s arch=x86  # 32 bits instead of 64
...

推荐的方法可能是使用配置文件:

$ conan package_files libname/1.1.1@name/testing # using your default profile
$ conan package_files libname/1.1.1@name/testing -pr=myprofile2

最近文档重新编写,您可能需要检查:https://docs.conan.io/en/latest/creating_packages/existing_binaries.html