我遇到了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)
所以当试图build立图书馆,我总是有一个错误:
消息编译器未find:需要构build
正如你可以看到,因为我的cmake生成器设置为“MinGW Makefiles”,poco不设置path目录kit_bindir
, kit81_bindir
和sdk_bindir
。
我已经尝试设置-Dkit_bindir= "C:/Program Files (x86)/Windows Kits/8.1/bin/x86/"
但构build仍然失败。 另外我不能预置CMAKE_MC_COMPILER,因为它将被重新定义。 官方的poco教程似乎没用。
主要问题是如何避免使用pocolib的消息编译器或如何预定义mc.exe的path?
谢谢。
更新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")
因此,只有当$ {CMAKE_GENERATOR}是“Visual Studio”时,才会看到一些必需的配置才可用。不幸的是,没有更多的Windows生成器可用。 正如你所看到的必须是Visual Studio提供的mc.exe,但如果你没有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