使用 VS Code 开发 Milvus
Milvus 的开发环境在最近半年里有过很多变化,目前的 Milvus 如果直接 clone 下来用 VS Code 打开的话会有不少 Error(不过并不影响编译)。主要是 CMake 和 CGO 调用的地方会报错,运气不好的话可能没法用查找引用的功能。这篇文章主要介绍针对 Milvus 的 VS Code 配置,让开发和测试更舒服。
CMake
Milvus 使用 conan 来管理 C++ 依赖,cmake 的 build 目录是 cmake_build
,而不是 build
。因此首先需要修改 cmake 的 build 目录路径,让 VS Code 的 CMake 插件能正确解析 CMakeLists.txt。在 .vscode/settings.json
中添加:
{
// ...
"cmake.sourceDirectory": "${workspaceFolder}/internal/core",
"cmake.buildDirectory": "${workspaceFolder}/cmake_build"
}
如果使用 clangd,还需要添加:
"clangd.arguments": [
"--compile-commands-dir=${workspaceFolder}/cmake_build",
]
Golang
Milvus 依赖 Knowhere 来做底层的 ANN 查询,后者是一个 C++ 库,因此会有很多的 CGO 调用。为了让 Go 插件能正确解析,首先需要编译一次 Milvus,直接在项目根目录执行 make
即可。编译之后,在 .vscode/settings.json
中添加:
{
// ...
"go.toolsEnvVars": {
"LD_LIBRARY_PATH": "${workspaceFolder}/internal/core/output/lib",
"PKG_CONFIG_PATH": "${workspaceFolder}/internal/core/output/lib/pkgconfig",
}
}
接下来就可以体验畅通无阻的开发了,所有 Go/C++ 代码的跳转和搜索功能应该都能正常使用,如果不起作用的话可以尝试 Ctrl + Shift + P
(Command + Shift + P
for Mac),选择 Reload Window
重启 VS Code。
单测
第三方组件
目前 Milvus 的单测还有一部分需要依赖第三方组件(Etcd, MinIO, Pulsar),因此运行单测之前需要先把第三方组件启动起来。不过 Milvus 已经提供了一个 docker-compose.yml
来方便的把依赖环境启动起来:
sudo docker-compose -f deployments/docker/dev/docker-compose.yml up -d
环境变量
Milvus 运行单测时需要依赖一些环境变量,不过可以通过 scripts/setenv.sh
来完成(fish 用户无法使用):
source scripts/setenv.sh && go test ...
也可以手动 export:
export PKG_CONFIG_PATH=(pwd)/internal/core/output/lib/pkgconfig
export RPATH=(pkg-config --libs-only-L milvus_common | cut -c 3-)
完成后使用下面的命令执行单测:
go test -ldflags="-r $RPATH" ...