如何使用Bazel构建包含openssl的第三方C++库?
问题描述:
长话短说,我试图用Bazel在OSX上建立一个项目,该项目取决于uWebSockets。我遇到了一个问题,如何添加的OpenSSL的依赖,以便在uWebSockets文件都能够包括文件从OpenSSL的,像这样:如何使用Bazel构建包含openssl的第三方C++库?
#include <openssl/opensslv.h>
在回购我的工作区文件看起来像(它看起来OpenSSL的安装通过自制):
new_http_archive(
name = "uwebsockets",
urls = ["https://github.com/uNetworking/uWebSockets/archive/master.zip"],
build_file = "BUILD.uWebSockets",
)
new_local_repository(
name = "systemssl",
path = "/usr/local/opt/openssl",
build_file = "BUILD.systemssl",
)
BUILD.uWebSockets:
cc_library(
name = "uwebsockets-lib",
hdrs = glob(["**/src/*.h"]),
srcs = glob(["**/src/*.cpp"]),
visibility = ["//visibility:public"],
deps = [
"@systemssl//:openssl",
],
)
BUILD.systemssl:
cc_library(
name = "openssl",
hdrs = glob(["**/openssl/*.h"]),
srcs = glob([
"**/libssl.a",
"**/libcrypto.a",
]),
visibility = ["//visibility:public"],
)
每当我试着运行构建,一切都建立正确,但我得到:
external/uwebsockets/uWebSockets-master/src/Networking.h:7:10: fatal error: 'openssl/opensslv.h' file not found
我必须在这里失去了一些东西,我究竟做错了什么?
答
我认为你需要BUILD.systemssl文件中的“includes”属性,以获取正确的包含路径,以取决于库的任何内容。
是否有一个原因,你的glob是以“**”开头的,是因为版本号是在文件路径中编码的?您还应该查看可以在WORKSPACE文件中用于new_local_repository的“strip_prefix”属性,以消除该问题。