gpt4 book ai didi

c++ - 使用 bazel 构建简单库时包含路径问题

转载 作者:行者123 更新时间:2023-11-28 04:05:04 24 4
gpt4 key购买 nike

演示结构如下:

.
├── demo
│ ├── include
│ │ └── func.h
│ │
│ └── src
│ ├── BUILD
│ │
│ └── func.cc
└── WORKSPACE

函数.h:

#pragma once

int square(int);

func.cc: 从根开始包含

#include "demo/include/func.h"

int square(int i) { return i * i; }

构建:

cc_library(
name = "simple_demo",
srcs = ["func.cc"],
visibility = ["//visibility:public"],
)

WORKSPACE 目录中的 Bazel 构建命令:

bazel build //demo/src:simple_demo

发生错误。

demo/src/func.cc:1:10: fatal error: 'demo/include/func.h' file not found

我在 https://docs.bazel.build/versions/1.1.0/be/c-cpp.html#hdrs 中看到了这个

All header files that are used in the build must be declared in the hdrs or srcs of cc_* rules. This is enforced.

但是,如果我将 hdrs = "../include/func.h" 添加到 BUILD 中,则会发生另一个错误

segment '..' not permitted

最佳答案

默认情况下,Bazel 标签不允许跨越包边界。在你的情况下 func.h 位于 BUILD 文件定义的包之外,仅限于 demo/src (和子文件夹) .

假设您正在创建一个库,其中 func.h 是从外部可见的公共(public) header ,我会将文件夹结构更改为:

.
├── demo
│ ├── include
│ │ └── func.h
│ ├── src
│ │ └── func.cc
│ └── BUILD
└── WORKSPACE

BUILD 文件还包含 func.h:

cc_library(
name = "simple_demo",
hdrs = ["include/func.h"],
srcs = ["src/func.cc"],
visibility = ["//visibility:public"],
)

请注意,即使使用建议的文件夹结构,如果您不包含 hdrs = ... 行(或者不包含 func.hsrcs = ...,如果 header 不打算公开),你会因为你提到的原因得到一个错误。

关于c++ - 使用 bazel 构建简单库时包含路径问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58869739/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com