我正在使用柯南作为 C++ 的依赖项管理器,我想创建一个包,它需要来自另一个已经创建的柯南包的编译文件。我目前正在尝试为 OpenStreetMap-Library OSM-binary ( https://github.com/scrosby/OSM-binary.git ) 创建一个包。
该项目的 Makefile(可以在./OSM-binary/src/Makefile中找到)需要来自protobuf 项目(https://github.com/google/protobuf )的名为 protoc 的文件。这个protoc文件可以在./protobuf/src中编译protobuf 项目后找到。
如果没有此文件,编译 OSM 源将失败并出现错误:make: ../protoc: Command not found
问题
正如柯南的文档建议将我需要的文件复制到我的包中的文件夹,例如头文件到./include,库到 . /lib等。据此,在通过 make 构建protobuf-project之后,我将通过复制提到的文件
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-packaged 声明为一项要求
requires = "protobuf/2.5.0@test/testing"
并将 osm-Makefile 中的相应行(在 1.3.3 版中,第 7 行)替换为protoc -file 的正确路径。
tools.replace_in_file("OSM-binary/src/Makefile",
"PROTOC ?= protoc",
"PROTOC ?= <path-to-file>/protoc")
现在这将我们引向我的实际问题:如何获取protoc -file 的路径,该路径可以在名为scripts的文件夹中的protobuf -package 中找到,或者还有其他方法吗?
谢谢,克里斯