Conan软件包:从其他Conan软件包获取编译文件 < >我使用柯南作为C++的依赖管理器,我想创建一个包,它需要从另一个已经编译的柯南包编译文件。 我目前正在尝试为OpenStreetMap库创建一个包OSM二进制文件()
此项目的Makefile(可在./OSM binary/src/Makefile中找到)需要一个名为protoc的文件,该文件来自protobuf项目()。在编译了./protobuf/src中的protobuf项目后,可以找到该文件 如果没有此文件,OSM源代码的编译将失败,并出现错误:Conan软件包:从其他Conan软件包获取编译文件 < >我使用柯南作为C++的依赖管理器,我想创建一个包,它需要从另一个已经编译的柯南包编译文件。 我目前正在尝试为OpenStreetMap库创建一个包OSM二进制文件(),c++,protocol-buffers,dependency-management,conan,C++,Protocol Buffers,Dependency Management,Conan,此项目的Makefile(可在./OSM binary/src/Makefile中找到)需要一个名为protoc的文件,该文件来自protobuf项目()。在编译了./protobuf/src中的protobuf项目后,可以找到该文件 如果没有此文件,OSM源代码的编译将失败,并出现错误:make:../protoc:Command not found 问题 正如柯南的文档建议的那样,将我需要的文件复制到我的包中的文件夹中,例如头文件到./include,libs到./lib,等等。 根据这一
make:../protoc:Command not found
问题 正如柯南的文档建议的那样,将我需要的文件复制到我的包中的文件夹中,例如头文件到./include,libs到./lib,等等。 根据这一点,在通过make构建protobuf项目之后,我将通过
def package(self):
self.copy("*.so", dst="lib", keep_path=False)
self.copy("protoc", dst="scripts", src="./protobuf/src")
转到名为“脚本”的文件夹
但在这一点上,黑魔法开始了。
我的第一个问题是,如何从另一个包访问这些打包文件(例如*.so文件或包中存在的任何其他文件(这里是protoc文件)?
对我来说,即使在阅读了柯南的文档之后,也不清楚柯南如何存储其打包的文件,以及如何访问这些文件或前一步打包的任何其他文件
现在回到OSM项目我的方法是通过
tools.replace
命令在Makefile中手动设置正确的路径。
首先,我声明protobuf打包为一个需求
requires = "protobuf/2.5.0@test/testing"
并将osm Makefile中的相应行(在版本1.3.3中,第7行)替换为到protoc-文件的正确路径
tools.replace_in_file("OSM-binary/src/Makefile",
"PROTOC ?= protoc",
"PROTOC ?= <path-to-file>/protoc")
tools.replace_文件(“OSM binary/src/Makefile”)中的_,
“PROTOC?=PROTOC”,
“PROTOC?=/PROTOC”)
现在,这就引出了我的实际问题:如何获取可在名为scripts的文件夹中的protobuf-包中找到的protoc-文件的路径,还是有其他方法
谢谢,
Chris从依赖项访问文件有不同的方法:
- 如果要直接从依赖项运行某些文件,可以使用
,它将自动设置路径、LD\u LIBRARY\u路径等,以便在安装包的位置找到二进制文件。查找更多信息self.run(..,run\u environment=True)
- 您可以直接
从依赖项导入所需的文件,将这些文件复制(在
方法之前)到build文件夹中,以便直接在那里使用它们。脚本中可以使用的路径是当前路径,或build()
。导入的文件将在生成后自动删除,因此不会意外地重新打包。检查self.build\u文件夹
- 您可以通过
属性从依赖项获取信息。检查一下。这意味着您可以通过以下方法获得self.deps\u cpp\u info
依赖项的路径protobuf
def build(self):
# Get the directory where protobuf package is installed
protoc_root = self.deps_cpp_info["protobuf"].rootpath
# Note this is a list
protoc_bin_paths = self.deps_cpp_info["protobuf"].bin_paths