如何使用Bazel构建包含openssl的第三方c ++库?

时间:2017-05-26 05:59:32

标签: c++ bazel

长话短说,我试图用Bazel在依赖uWebSockets的OSX上构建一个项目。我遇到了如何添加openssl作为依赖项的问题,以便uWebSockets中的文件能够包含来自openssl的文件,如下所示:

#include <openssl/opensslv.h>
回购中的我的WORKSPACE文件看起来像(它查找通过自制软件安装的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

我必须在这里遗漏一些东西,我做错了什么?

1 个答案:

答案 0 :(得分:0)

我认为你需要一个&#34;包括&#34; BUILD.systemssl文件中的属性,用于取决于库的任何内容的正确包含路径。

为什么你的glob以&#34; **&#34;开头?是因为版本号是在文件路径中编码的吗?您还应该查看&#34; strip_prefix&#34;您可以在WORKSPACE文件中用于new_local_repository的属性来删除它。