Windows下编译POCO库使用MinGW-W64(消息编译器未找到)
问题描述:
我有从PocoMacros.cmake文件下面的代码部分的问题:Windows下编译POCO库使用MinGW-W64(消息编译器未找到)
# 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的Makefile文件”,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?
答
我想我找到了解决办法,在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")
所以你看一些necessairy配置availabilable只有$ {} 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
我不要认为poco构建系统支持mingw-w64。它有一个已经过时的“mingw”条目。我必须对构建系统进行一些更改才能使其工作。尽管这是1.6.0版本,但自那时起我还没有检查是否增加了支持 –