在Windows下用Mingw-W64编译POCO库(找不到消息编译器)



我在pocomacros.cmake File:

的遵循代码的一部分时遇到问题
#  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 Generator设置为" mingw makefiles",POCO不会为目录kit_bindirkit81_bindirsdk_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发布仍然没有任何更改。也许我可以使用一些好的端口?

更新2 感谢@sourcedelica

对于POCO 1.9.0,您只需要安装Windows SDK,然后添加C: Program Files(X86) Microsoft SDKS Windows Windows v7.1a bin bin x64

之后

我想我找到了一个解决方案,在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 Generators可用。如您所见,必需品是MC.EXE,它可以由Visual Studio提供,但是如果您没有VS(我不这样做),则需要下载并安装Microsoft SDK。然后查看设置:

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

相关内容

最新更新