CMake try_compile()找不到正确的Windows 10 SDK

时间:2017-10-15 00:15:15

标签: visual-c++ cmake visual-studio-2017

我正在尝试使用CMake 3.9.0-MSVC_2编译my fork of ReactOS(包含在Visual Studio 2017中,15.4更新)。当我让CMake生成NMake makefile或Ninja输入时,它工作得很好。但是,当我告诉CMake生成Visual Studio 2017解决方案时,它会因为一个奇怪的错误而失败。以下是如何重现此问题:

  1. 克隆git@github.com:SunburstApps/ReactOS。 (这是一个很大的回购,所以请耐心等待。如果有人要求,我无法在较小的项目上一直重现这个问题。)
  2. 在项目目录的根目录中,从VS2017 x86 C ++ tools命令提示符处运行configure.cmd VSSolution。这将告诉CMake生成一个Visual Studio解决方案(确切的版本是从路径中的cl.exe副本推断出来的。)
  3. 我得到以下CMake输出:

    -- The C compiler identification is unknown
    -- The CXX compiler identification is unknown
    CMake Error at CMakeLists.txt:24 (project):
      The CMAKE_C_COMPILER:
    
        cl
    
      is not a full path and was not found in the PATH.
    
    
    CMake Error at CMakeLists.txt:24 (project):
      The CMAKE_CXX_COMPILER:
    
        cl
    
      is not a full path and was not found in the PATH.
    
    
    
    -- Configuring incomplete, errors occurred!
    

    调查CMakeError.log文件显示问题实际上是其他问题。 CMake为识别编译器而生成的vcxproj文件拒绝链接,抱怨ucrtd.lib无法找到。如果我将以下代码行添加到顶级CMakeLists.txt文件中,它将稍微进一步(成功识别编译器),仅在try_compile()运行到&#34期间死于同一问题;检测编译器功能"。

    set(CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION 10.0.15063.0)
    

    我得出结论,CMake正在生成没有Windows SDK目标平台集的文件,这导致VS拒绝定位ucrtd.lib。上面的set()行告诉CMake将该特定版本添加到它生成的vcxproj文件中,但很明显它并没有将它添加到所有这些文件中。

    我尝试过其他搜索过的解决方案,包括安装Windows 8.1 SDK并以管理员身份运行CMake命令。什么都没有帮助。我需要生成一个解决方案文件,以便我可以使用Visual Studio的优秀C ++编辑器为该项目编写代码。 (我也尝试在VS2017中使用内置的CMake支持,但是由于ReactOS特定的交叉编译要求,它已经发现它不能正常工作。)任何人都可以给我一些指示吗?谢谢!

0 个答案:

没有答案