如何在Bazel中使用系统apt-get安装的SFML库并创建cc_library规则
在Bazel中使用系统apt安装的SFML库
1. 先确认SFML的安装位置
用pkg-config工具快速获取SFML的编译和链接参数,终端执行:
pkg-config --cflags sfml-all pkg-config --libs sfml-all
输出会明确SFML的头文件目录(比如/usr/include/SFML)、库文件路径(比如/usr/lib/x86_64-linux-gnu),以及需要链接的组件库列表。
2. 编写自定义cc_library规则
在项目的BUILD文件里添加以下规则,直接指向系统中已安装的SFML文件:
cc_library( name = "sfml", # 匹配所有SFML头文件,让Bazel能正确追踪依赖关系 hdrs = glob(["/usr/include/SFML/**/*.hpp"]), # 指定头文件根目录,代码里可直接写#include <SFML/Graphics.hpp> includes = ["/usr/include/SFML"], # 对应pkg-config输出的链接参数,可按需删减不需要的组件库 linkopts = [ "-L/usr/lib/x86_64-linux-gnu", "-lsfml-graphics", "-lsfml-window", "-lsfml-system", "-lsfml-audio", "-lsfml-network", ], # 设置为public,允许项目内其他目标引用这个库 visibility = ["//visibility:public"], )
3. 在代码目标中引用SFML
比如你的主程序BUILD规则可以这么写:
cc_binary( name = "main", srcs = ["main.cpp"], deps = [":sfml"], )
几个注意点
- 不同架构的系统库路径可能不同,比如arm64架构是
/usr/lib/aarch64-linux-gnu,请根据pkg-config的实际输出调整 - 若只用到SFML的部分功能(比如仅图形和系统模块),可以只保留对应的
-lsfml-graphics和-lsfml-system,无需链接全部组件库 - 确保系统已安装SFML开发包:
sudo apt-get install libsfml-dev
内容的提问来源于stack exchange,提问作者Ivan
相关产品推荐
相关产品推荐

