2016-12-03 219 views
1

我有從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_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發佈仍然沒有改變。也許有一些好的端口可以使用CMake?

+0

我不要認爲poco構建系統支持mingw-w64。它有一個已經過時的「mingw」條目。我必須對構建系統進行一些更改才能使其工作。儘管這是1.6.0版本,但自那時起我還沒有檢查是否增加了支持 –

回答

2

我想我找到了解決辦法,在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