我正在尝试使用CMake 3.9.0-MSVC_2编译my fork of ReactOS(包含在Visual Studio 2017中,15.4更新)。当我让CMake生成NMake makefile或Ninja输入时,它工作得很好。但是,当我告诉CMake生成Visual Studio 2017解决方案时,它会因为一个奇怪的错误而失败。以下是如何重现此问题:
git@github.com:SunburstApps/ReactOS
。 (这是一个很大的回购,所以请耐心等待。如果有人要求,我无法在较小的项目上一直重现这个问题。)configure.cmd VSSolution
。这将告诉CMake生成一个Visual Studio解决方案(确切的版本是从路径中的cl.exe副本推断出来的。)我得到以下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特定的交叉编译要求,它已经发现它不能正常工作。)任何人都可以给我一些指示吗?谢谢!