我使用柯南管理我的(c ++)项目中的依赖项。 现在,我在项目中需要一些相对较大的文件,不应将其检入到GIT中。我将这些文件保存在http服务器上,并希望通过柯南食谱下载它们并在我的项目中使用(完成的二进制文件需要这些文件,而与构建过程本身无关)。
但是我无法让柯南将文件复制到正确的位置,这是我的尝试:
from conan's import ConanFile, tools
class MyPackage(ConanFile):
name = "package"
version = "11.28"
author = "Whatever"
keep_imports = True
exports = "*"
def source(self):
tools.get("http://just/a/file.zip")
def imports(self):
self.copy("*", dst="content")
def package(self):
self.copy("*")
def package_id(self):
self.info.header_only()
例如,如果我的项目位于C:\ dev \ project下,而文件A.dat,B / C.dat位于“ file.zip”中,则我希望它们位于c:\下dev \ project \ \ A.dat或c:\ dev \ project \ \ B \ C.dat
问题是当我运行配方时,文件位于
答案 0 :(得分:1)
您正在打电话
conan create .
当我运行食谱时。实际上,您无法修改运行conan create的本地文件夹,但是此规则有一个例外: 如果您定义
set_version(self):
self.version = "11.28"
# do whatever you want in your local folder
# e.g. tools.get("http://just/a/file.zip")
# and unpack your files into A.dat and B/C.dat
在您的食谱中。您在此功能中所做的所有操作均在当前工作目录中执行,因此您可以在此处下载zip文件,然后将其复制到其位置。 此外,如果希望它们成为最终程序包的一部分,则必须使用exports_sources属性选择这些文件:
exports_sources = "A.dat","B/C.dat"
这是一个hack,但是应该避免。 尝试使用以下配方将文件“ A.dat”和“ C.dat”打包在一个名为 MyDats / 1.0 的单独包中:
class MyPackage(ConanFile):
name = "MyDats"
version = "1.0"
def source(self):
tools.get("http://just/a/file.zip")
# unpack files into A.dat and C.dat herein..
def package(self):
self.copy("*", dest = "include", keep_path = False)
def package_id(self):
self.info.header_only()
顺便说一句:通常不需要指定export =“ *”,唯一应导出的内容是运行配方本身所需的文件(而不是源代码或文件A)。 dat,C.dat)。
致电时
conan create .
对此,它将打包您的文件并将其本地安装在缓存中。 然后将conanfile.txt放在您的本地项目的文件夹C:\ dev \ project \ import \中,其中包含:
[requires]
MyDats/1.0
[imports]
include, A.dat -> ..\
include, C.dat -> ..\B
您显然可以将conanfile.txt放置在project \ import之外的其他位置,重点是不要在同一位置放置两个配方。
如果完成的二进制文件中需要这些文件,则应将它们包括在项目包中,据我所知,这是您无意间所做的。