前置要求:

  • Windows Terminal+nushell:可选。
  • vs 2022:编译器、cmake
  • Intel oneMKLfaiss 依赖。
  • vcpkg:用来安装 gflags

本文命令行均运行在 nushell,如需运行在 PowerShell 中,请自行微调。

打开 Windows Terminalnushell for vs(参见附录)或 Developer PowerShell for VS 2022

因为 Developer PowerShell 会修改 VCPKG_ROOT 为 vs 2022 的,而这个版本似乎用不了,报错缺少 vcpkg.json,因此这里要重置 vcpkg 根目录为你安装的 vcpkg 目录(如果你用的 nushell for vs 则不需要这个步骤,文末的附录里有恢复 vcpkg 路径的代码):

# 记得修改这里的 vcpkg 路径。
$env.VCPKG_ROOT = 'C:\sdk\vcpkg'
# 或使用 PowerShell:
# $env:VCPKG_ROOT = 'C:\sdk\vcpkg'

安装 gflags

vcpkg install gflags

构建:

# 将 vs2022 的 cmake 添加到 Path 路径,如果是自己装的,编译的时候会报错 Could NOT find OpenMP_CUDA。
path add 'C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin'
# 或使用 PowerShell:
# $env:Path = "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin;$env:Path"

cmake -B build -DFAISS_ENABLE_C_API=ON -DBLA_VENDOR=Intel10_64_dyn '-DMKL_LIBRARIES=C:\Program Files (x86)\Intel\oneAPI\mkl\2025.0\lib' -DFAISS_ENABLE_PYTHON=OFF -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFF .
cmake --build build --config Release -j 16

安装到一个目录,如 C:\sdk\faiss

cmake --install build --prefix 'C:\sdk\faiss'

附录:Windows Terminalnushell for vs 配置

打开:%USERPROFILE%\AppData\Local\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json,在 profileslist 中添加:

{
  "commandline": "powershell.exe -Command \"&{ $vcpkg = $env:VCPKG_ROOT; Import-Module \"\"\"C:\\Program Files\\Microsoft Visual Studio\\2022\\Enterprise\\Common7\\Tools\\Microsoft.VisualStudio.DevShell.dll\"\"\"; Enter-VsDevShell -VsInstallPath \"\"\"C:\\Program Files\\Microsoft Visual Studio\\2022\\Enterprise\"\"\" -SkipAutomaticLocation -DevCmdArguments \"\"\"-arch=x64 -host_arch=x64\"\"\"; if ($vcpkg) { $env:VCPKG_ROOT = $vcpkg; } nu }\"",
  "font": {
    "size": 13.0
  },
  "guid": "{2f76c985-1644-43e8-b016-239e7f8dd7f1}",
  "hidden": false,
  "name": "nushell for vs"
}