[英]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三个文件夹
如果是这样,怎么可能告诉编译器和链接器:
我试过下面的 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 文件夹结构,还假设您确实有两个更重要的事情:
主要的构建文件应该是:
cc_binary(
name = "hello-bazel",
srcs = ["main.cpp", "SomeClass.h", "SomeClass.cpp"],
deps = ["@boost//:boost_172_shared"],
)
这次我们需要添加另一个构建文件,让我们将其命名为 BUILD.boost 放置在应用程序主文件夹 hello-bazel/dependency 的子文件夹中,如下所示:
hello-bazel -> 示例文件夹
在子文件夹依赖项中添加上面指出的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.