使用 MS Visual Studio 编译 gRPC 时缺少 CMAKE_ASM_NASM_COMPILER

Dr *_*hil 2 c++ cmake visual-studio grpc

我正在尝试在 Windows 10 上使用 Visual Studio 2022 构建 gRPC C++ (1.48.0)。这是一个 CMake 构建 (cmake 3.22.22011901-MSVC_2)

我能够构建其他一切,但被困在 BoringSSL 上。相关的CMakeList正在尝试启用enable_language(ASM_NASM)。上下文如下:

if(NOT OPENSSL_NO_ASM)
  if(UNIX)
    enable_language(ASM)

    # Clang's integerated assembler does not support debug symbols.
    if(NOT CMAKE_ASM_COMPILER_ID MATCHES "Clang")
      set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -Wa,-g")
    endif()

    # CMake does not add -isysroot and -arch flags to assembly.
    if(APPLE)
      if(CMAKE_OSX_SYSROOT)
        set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -isysroot \"${CMAKE_OSX_SYSROOT}\"")
      endif()
      foreach(arch ${CMAKE_OSX_ARCHITECTURES})
        set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -arch ${arch}")
      endforeach()
    endif()
  else()
    set(CMAKE_ASM_NASM_FLAGS "${CMAKE_ASM_NASM_FLAGS} -gcv8")
    enable_language(ASM_NASM)
  endif()
endif()
Run Code Online (Sandbox Code Playgroud)

它给我CMake 错误:“找不到 CMAKE_ASM_NASM_COMPILER。”

我对编译器/汇编器了解不够,也不了解为什么 BoringSSL 需要一个特定的编译器/汇编器(其他模块都不需要,包括 gRPC)。

解决这个问题的推荐方法是什么?

Dr *_*hil 5

至少为未来的自己以及处于旅程中类似阶段的其他人回答一些问题。

NASM是一个汇编编译器(汇编器)。BoringSSL 有一些汇编语言代码,这就是为什么它需要汇编编译器(而 gRPC 或其他模块则不需要)。我会让其他人来解释为什么使用 NASM 而不是其他汇编器。

要解决此问题,您必须从此处下载/安装相关的 NASM 可执行文件。我发现下载 exe、将其放置在文件夹中、将该文件夹添加到 PATH 并使用名称 nasm.exe 设置另一个环境变量 ASM_NASM 更容易。

一旦我这样做了,boringSSL 和整个 gRPC 就编译得非常顺利。