在 Windows 下使用 MinGW-w64 编译 POCO 库(未找到消息编译器)
Compiling POCO library with MinGW-w64 under Windows (message compiler not found)
我在使用 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)
因此,在尝试构建库时,我总是遇到错误:
message compiler not found: required to build
如您所见,因为我的 cmake 生成器设置为 "MinGW Makefiles",poco 没有为目录 kit_bindir
、kit81_bindir
和 sdk_bindir
.[=18 设置路径=]
我已经尝试设置 -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 SDKs,然后在[=之后将C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Bin\x64 添加到PATH 18=]
我想我找到了解决办法,在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
中生成完成”
我在使用 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)
因此,在尝试构建库时,我总是遇到错误:
message compiler not found: required to build
如您所见,因为我的 cmake 生成器设置为 "MinGW Makefiles",poco 没有为目录 kit_bindir
、kit81_bindir
和 sdk_bindir
.[=18 设置路径=]
我已经尝试设置 -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 SDKs,然后在[=之后将C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Bin\x64 添加到PATH 18=]
我想我找到了解决办法,在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
中生成完成”