运行 build()
方法时,如果要打包的文件是本地文件,则不会产生任何附加值,因为无法复制从用户文件夹复制的文件。对于这种情况,直接运行conan export-pkg
命令。
仍然需要Conan配方,但非常简单,只包含软件包元信息。可以使用conan new
命令创建基本配方:
$ conan new hello/0.1 --bare
这将在本地缓存中创建并存储以下包配方:
class HelloConan(ConanFile):
name = "hello"
version = "0.1"
settings = "os", "compiler", "build_type", "arch"
def package(self):
self.copy("*")
def package_info(self):
self.cpp_info.libs = self.collect_libs()
提供的 package_info()
方法扫描包文件,为最终用户提供要链接的库的名称。可以进一步自定义此方法以提供其他构建标志 (通常取决于设置)。默认 package_info()
的应用如下: 它定义 “include” 文件夹中的头文件、 “lib” 文件夹中的库以及 “bin” 文件夹中的二进制文件。可以在 package_info()
方法中定义不同的包布局。
还可以扩展此包配方,以支持更多配置 (例如,添加选项: shared/static,或使用不同的设置) 、添加依赖项 (requires
) 等。
基于以上所述,我们可以假设当前目录包含一个lib文件夹,其中包含此 “hello” 二进制库 libhello.a,例如与Windows MinGW (gcc) 版本 4.9 兼容:
$ conan export-pkg . hello/0.1@myuser/testing -s os=Windows -s compiler=gcc -s compiler.version=4.9 ...
仍然强烈建议在上传之前在本地测试包时使用test_package文件夹。由于我们不想从源代码构建包,因此流程为:
$ conan new hello/0.1 --bare --test
# customize test_package project
# customize package recipe if necessary
$ cd my/path/to/binaries
$ conan export-pkg PATH/TO/conanfile.py hello/0.1@myuser/testing -s os=Windows -s compiler=gcc -s compiler.version=4.9 ...
$ conan test PATH/TO/test_package/conanfile.py hello/0.1@myuser/testing -s os=Windows -s compiler=gcc -s ...
对于任意数量的配置,可以重复最后两个步骤。