簡體   English   中英

Bazel 如何構建一個簡單的應用程序來鏈接一個預先構建的外部庫

[英]Bazel how to build a simple application that links a pre-built external Library

使用Bazel 2.2,我如何針對外部庫進行構建,例如在我的情況下,我想針對 boost(為 MS VC++ 2019 預構建)進行構建,問題是這在 Bazel 中是否可行?

鑒於boost庫的本地路徑是c:\\boost_1_72_0,其中有bin、include和lib三個文件夾

如果是這樣,怎么可能告訴編譯器和鏈接器:

  • 包含文件的路徑
  • lib文件的路徑
  • 要鏈接的 boost 庫特定 .lib 文件(即 boost_context-vc142-mt-x64-1_72.lib)

我試過下面的 cc_library 但不幸的是它沒有用。

cc_library(
    name = "boost",
    srcs = glob(["*.lib"]),
    hdrs = glob(["*.hpp", "*.*", "*"] + ["boost/*.hpp"] + ["boost/*/*.hpp"]),
    includes = [
        "C:/boost_1_72_0/include"
    ],
    linkopts = ["-pthread","-LC:/boost_1_72_0/lib"],
    visibility = ["//visibility:public"],
)

cc_binary(
    name = "hello-bazel",
    srcs = ["main.cpp", "SomeClass.h", "SomeClass.cpp"],
    deps = [":boost"],
)

最后我想通了。 實際上,它與 CMake 或任何其他構建工具非常不同,以防您來自 CMake 背景(就像我一樣)。

首先,我假設您確實有一個預先構建的 c/c++ 外部庫,即 C:\\boost 具有 include、bin 和 lib 文件夾結構,還假設您確實有兩個更重要的事情:

  • 托管主WORKSPACE文件的文件夾。
  • 引用您的主應用程序(包)的BUILD文件

主要的構建文件應該是:

cc_binary(
    name = "hello-bazel",
    srcs = ["main.cpp", "SomeClass.h", "SomeClass.cpp"],
    deps = ["@boost//:boost_172_shared"],
)

這次我們需要添加另一個構建文件,讓我們將其命名為 BUILD.boost 放置在應用程序主文件夾 hello-bazel/dependency 的子文件夾中,如下所示:

hello-bazel -> 示例文件夾

  • 工作區 -> 文件
  • main -> 托管您的BUILD 、 main.cpp、 someclass.h 和 someclass.cpp 的文件夾
  • 依賴項 -> 托管BUILD.boost 的文件夾

在子文件夾依賴項中添加上面指出的BUILD.boost以包括:

cc_library(
    name = "boost_172_shared",
    srcs = glob(["lib/*.lib"]),
    hdrs = glob( ["include/boost/*.hpp"] +    ["include/boost/*.h"] + 
                 ["include/boost/**/*.hpp"] + ["include/boost/**/*.h"] + 
                 ["include/boost/**/**/**/*.hpp"] + ["include/boost/**/**/**/*.h"] + 
                 ["include/boost/**/**/*.hpp"] +    ["include/boost/**/**/*.h"] ),
    strip_include_prefix = "include/",
    visibility = ["//visibility:public"]
)

我們需要如上所示編輯您的 WORKSPACE 文件以包含以下內容:

new_local_repository(
    name = "boost",
    path = "C:\\Development\\Libraries\\boost\\",
    build_file = "dependency\\BUILD.boost",
)

上面的new_local_repository是指向你的外部庫的關鍵,正如 – Ondrej K 在評論中提到的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM