如何在C++ Bazel项目中添加RxCpp?编译示例时库未找到
解决Bazel编译RxCpp示例时的库未找到问题
我来帮你搞定这个Bazel和RxCpp的适配问题——核心原因是你还没给Bazel写正确的构建配置,哪怕所有文件在同一目录,Bazel也需要明确的规则来识别依赖关系。结合你的环境(MacOS 10.13.3 + Bazel 0.11.1 + Clang 9.0.0),咱们一步步来解决:
第一步:确认RxCpp的目录结构
假设你已经把RxCpp的源码包解压到了项目根目录,目录结构大概是这样:
你的项目目录/ ├── main.cc ├── rxcpp/ │ ├── rx.hpp │ └── 其他RxCpp头文件子目录
如果你的RxCpp目录名不是rxcpp,后面的配置要对应修改。
第二步:编写Bazel BUILD文件
在项目根目录创建BUILD文件,写入以下规则:
# 定义RxCpp的库规则,让Bazel能识别它 cc_library( name = "rxcpp", # 匹配RxCpp所有的头文件 hdrs = glob(["rxcpp/**/*.hpp", "rxcpp/**/*.h"]), # 将rxcpp目录加入头文件搜索路径,这样代码里的#include能正确找到文件 includes = ["rxcpp"], # 允许其他规则依赖这个库 visibility = ["//visibility:public"], ) # 你的主程序编译规则 cc_binary( name = "hello_rxcpp", srcs = ["main.cc"], # 依赖上面定义的RxCpp库 deps = [":rxcpp"], )
第三步:编译并运行
在终端进入项目目录,执行以下命令:
# 编译程序 bazel build :hello_rxcpp # 运行编译后的程序 ./bazel-bin/hello_rxcpp
正常情况下你就能看到Hello RxCpp!的输出了。
额外注意事项
- 如果你的RxCpp是预编译库(比如
.a或.dylib文件),需要在cc_library的srcs字段里添加库文件路径,比如srcs = ["libRxCpp.a"],同时保留hdrs和includes配置。 - 虽然你用的Bazel 0.11.1版本比较老,但上面的规则完全兼容这个版本,不用担心兼容性问题。
- 检查
main.cc里的头文件引用:#include "rxcpp/rx.hpp"是对应RxCpp源码根目录的结构,如果你的rx.hpp在其他子路径,要调整include语句或者BUILD里的includes路径。
内容的提问来源于stack exchange,提问作者Darragh
相关产品推荐
相关产品推荐

