Bazel 如何构建一个链接预构建外部库的简单应用程序

2023-12-05

Using Bazel2.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++ 外部库,即带有 include、bin 和 lib 文件夹结构的 C:\boost,还假设您确实有两件更重要的事情:

  • 托管您的主文件夹的文件夹工作空间 file.
  • 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
  • 依赖项 -> 托管文件夹构建.boost

Add 构建.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",
)

以上新本地存储库是指向外部库的关键,正如 Ondrej K 在评论中提到的那样。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Bazel 如何构建一个链接预构建外部库的简单应用程序 的相关文章

随机推荐