在Windows下使用MinGW-w64编译POCO库(消息编译器未找到)

5

我对来自PocoMacros.cmake文件的以下代码部分有问题:

#  CMAKE_MC_COMPILER - where to find mc.exe
if (WIN32)
  # cmake has CMAKE_RC_COMPILER, but no message compiler
  if ("${CMAKE_GENERATOR}" MATCHES "Visual Studio")
    # this path is only present for 2008+, but we currently require PATH to
    # be set up anyway
    get_filename_component(sdk_dir "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows;CurrentInstallFolder]" REALPATH)
    get_filename_component(kit_dir "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows Kits\\Installed Roots;KitsRoot]" REALPATH)
    get_filename_component(kit81_dir "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows Kits\\Installed Roots;KitsRoot81]" REALPATH)
    if (X64)
      set(sdk_bindir "${sdk_dir}/bin/x64")
      set(kit_bindir "${kit_dir}/bin/x64")
      set(kit81_bindir "${kit81_dir}/bin/x64")
    else (X64)
      set(sdk_bindir "${sdk_dir}/bin")
      set(kit_bindir "${kit_dir}/bin/x86")
      set(kit81_bindir "${kit81_dir}/bin/x86")
    endif (X64)
  endif ()
  find_program(CMAKE_MC_COMPILER mc.exe HINTS "${sdk_bindir}" "${kit_bindir}" "${kit81_bindir}"
    DOC "path to message compiler")
  if (NOT CMAKE_MC_COMPILER)
    message(FATAL_ERROR "message compiler not found: required to build")
  endif (NOT CMAKE_MC_COMPILER)
  message(STATUS "Found message compiler: ${CMAKE_MC_COMPILER}")
  mark_as_advanced(CMAKE_MC_COMPILER)
endif(WIN32)

当我尝试构建库时,总是会出现错误:

“找不到消息编译器:需要进行构建”

如您所见,由于我的cmake生成器设置为“MinGW Makefiles”,poco没有为目录kit_bindir、kit81_bindir和sdk_bindir设置路径。

我尝试设置-Dkit_bindir =“C:/Program Files(x86)/Windows Kits / 8.1 / bin / x86 /”,但构建仍然失败。另外,我无法预设CMAKE_MC_COMPILER,因为它将被重新定义。官方的poco教程似乎没用。

主要问题是如何避免使用pocolib的消息编译器,或者如何预定义mc.exe的路径?谢谢。

更新1

我正在使用POCO版本v.1.7.6。发布的版本1.7.7仍然没有改变。也许有一些好的CMake端口可以使用吗?

更新2 感谢@sourcedelica

对于Poco 1.9.0,您只需要安装Windows SDK,然后在之后将C:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v7.1A \ Bin \ x64添加到PATH中。

我认为 poco 构建系统不支持 mingw-w64。它有一个过时的“mingw”条目。我不得不对构建系统进行了大量更改才能使其正常工作。虽然这是版本1.6.0,但我还没有检查他们是否在此后添加了支持。 - M.M
1
我的位置不同:C:/Program Files (x86)/Windows Kits/10/bin/10.0.18362.0/x64 - serg06
1个回答

3

我想我找到了一个解决方案,在PocoMacros.cmake文件中有以下代码:

  if ("${CMAKE_GENERATOR}" MATCHES "Visual Studio")
    # this path is only present for 2008+, but we currently require PATH to
    # be set up anyway
    get_filename_component(sdk_dir "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows;CurrentInstallFolder]" REALPATH)
    get_filename_component(kit_dir "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows Kits\\Installed Roots;KitsRoot]" REALPATH)
    get_filename_component(kit81_dir "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows Kits\\Installed Roots;KitsRoot81]" REALPATH)
    if (X64)
      set(sdk_bindir "${sdk_dir}/bin/x64")
      set(kit_bindir "${kit_dir}/bin/x64")
      set(kit81_bindir "${kit81_dir}/bin/x64")
    else (X64)
      set(sdk_bindir "${sdk_dir}/bin")
      set(kit_bindir "${kit_dir}/bin/x86")
      set(kit81_bindir "${kit81_dir}/bin/x86")
    endif (X64)
  endif ()
  find_program(CMAKE_MC_COMPILER mc.exe HINTS "${sdk_bindir}" "${kit_bindir}" "${kit81_bindir}"
    DOC "path to message compiler")

正如您所看到的,一些必要的配置仅在${CMAKE_GENERATOR}为“Visual Studio”时可用,而不幸的是,没有更多的Windows生成器可用。 如您所见,必要的是mc.exe,它只能通过Visual Studio获得,但如果您没有VS(就像我一样),您需要下载并安装Microsoft SDKs。 然后查看设置:

get_filename_component(sdk_dir "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows;CurrentInstallFolder]" REALPATH)
set(sdk_bindir "${sdk_dir}/bin/")

你需要在以下位置之前复制它们:

  find_program(CMAKE_MC_COMPILER MC.Exe HINTS "${sdk_bindir}" "${kit_bindir}" "${kit81_bindir}"

这对我很有帮助,我看到了:"配置完成,生成完成"。在CMake中。

1
对于Poco 1.9.0,我只需要在安装Windows SDK后将C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Bin\x64添加到我的PATH中即可,无需更改CMakefile。 - sourcedelica

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接