当前位置: 首页 > 知识库问答 >
问题:

将Nlohmann/JSON构建为bazel库会出现“nothing to build”错误

东门玺
2023-03-14

我有一个非常简单的bazel项目,试图将https://github.com/nlohmann/json添加为依赖项。为此,我在本地克隆了JSONrepo,并在repo的根目录中添加了build文件,以生成一个cc_library,其中包含一个includejson.hpp文件。但当我建造那个的时候,它总是抱怨没有什么可建造的。

├── json
│   ├── BUILD
│   ├── // all files under nlohmann/json repo.
├── myproject
│   ├── BUILD
│   └── Main.cpp
└── WORKSPACE

JSON/Build:

cc_library(
    name = "json",
    hdrs = ["single_include/nlohmann/json.hpp"],
    includes = ["json"],
    visibility = ["//visibility:public"],
)

上面的构建成功了,但是没有生成库。注意输出中的'(nothing to build)'消息。

bazel build :json
INFO: Analyzed target //json:json (0 packages loaded, 0 targets configured).
INFO: Found 1 target...
Target //json:json up-to-date (nothing to build)
INFO: Elapsed time: 0.065s, Critical Path: 0.00s
INFO: 1 process: 1 internal.
INFO: Build completed successfully, 1 total action

myProject/main.cpp:

#include <single_include/nlohmann/json.hpp>

int main() {
    ...
}
cc_binary(
  name = "main",
  srcs = ["Main.cpp"],
  deps = [ "//json:json"]
)
myproject/Main.cpp:1:44: fatal error: single_include/nlohmann/json.hpp: No such file or directory
compilation terminated.

你知道我错过了什么吗?我的目标是将JSONrepo用作我的bazel项目MyProject中的依赖项。

共有1个答案

张溪叠
2023-03-14

最好使用http_repository/git_repository机制获取外部依赖项,因为它们不会扰乱repo的历史记录,更容易更新,而且如果不构建依赖于它的任何东西,甚至不会获取它们。

# /WORKSPACE file
http_archive(
    name = "com_github_nlohmann_json",
    build_file = "//third_party:json.BUILD", # see below
    sha256 = "4cf0df69731494668bdd6460ed8cb269b68de9c19ad8c27abc24cd72605b2d5b",
    strip_prefix = "json-3.9.1",
    urls = ["https://github.com/nlohmann/json/archive/v3.9.1.tar.gz"],
)

# /third_party/json.BUILD file
package(default_visibility = ["//visibility:public"])

load("@rules_cc//cc:defs.bzl", "cc_library")

licenses(["notice"]) # MIT license

cc_library(
    name = "json",
    hdrs = ["single_include/nlohmann/json.hpp"],
    strip_include_prefix = "single_include/",
)

后来呢:

cc_binary(
  name = "main",
  srcs = ["Main.cpp"],
  deps = [ "@com_github_nlohmann_json//:json"]
)
// Main.cpp file
#include "nlohmann/json.hpp"
 类似资料:
  • 我目前正在按照这里的说明使用bazel从源代码构建tenorflow。 设置配置并尝试构建配置后,出现以下错误: Cuda配置错误:将C:/Program Files/NVIDIA GPU Computing读取到olkit/Cuda/v9时出错。0/include/cudnn。h:爪哇。伊奥。IOException:错误:src/main/native/win-dows/processes jn

  • 我试图为我的RPI编译Qt5库,但它总是崩溃。 在遵循其中一个指南之后,我现在陷入了。 这是我收到的错误:

  • 我想做一个APK的网络应用程序,我把它包装成Cordova。我遵循了各种教程,安装了Gradle并使其工作。 当我从CMD运行时,我会得到以下错误:

  • null 看起来bazel在cc_test和android toolchain上有问题 有什么方法可以使用Bazel为android构建和运行一个可执行文件吗?也许我错过了一些命令行参数 编辑:

  • 错误:第 1 行的解析错误:函数搜索(sour ^ 期望“字符串”、“数字”、“空”、“真”、“假”、“{”、“[”,得到“未定义” 代码:

  • 我正在尝试在Windows 7上使用Cmake构建OpenCV。我选择使用Visual Studio 10编译器。 我收到以下错误: C:/程序文件 (x86)/CMake 2.8/共享/生成 2.8/模块/CMakeCXX 中的生成错误信息:37 (get_filename_component): get_filename_component调用不正确的参数数调用堆栈(最近的调用优先):CMak