CMake - 如何将 windows SDK 版本传递给使用 msbuild 构建的 ExternalProject?

CMake - How can I pass the windows SDK version to an ExternalProject built with msbuild?

我有一个具有外部依赖项 (Crypto++) 的 CMake 项目。外部项目提供了一个 vcxproj 文件,所以为了将它添加到构建过程中,我这样添加它:

ExternalProject_Add(CryptoPP
    SOURCE_DIR ${CRYPTOPP_SRC_DIR}

    CONFIGURE_COMMAND ""

    BUILD_COMMAND "${MSBUILD_EXE}" 
        "/p:OutDir=<BINARY_DIR>/bin/$<CONFIG>/"
        "/p:IntDir=<BINARY_DIR>/obj/$<CONFIG>/"
        "/p:Configuration=$<CONFIG>"
        "/p:Platform=${CMAKE_VS_PLATFORM_NAME}"
        "<SOURCE_DIR>/${CRYPTOPP_PROJECT}"

    INSTALL_COMMAND "${CMAKE_COMMAND}" -E make_directory <INSTALL_DIR>/lib
            COMMAND "${CMAKE_COMMAND}" -E copy <BINARY_DIR>/bin/$<CONFIG>/cryptlib${CMAKE_STATIC_LIBRARY_SUFFIX} <INSTALL_DIR>/lib
)

在我开始使用 Windows 10 之前一切正常。现在我收到此错误:The Windows SDK version 8.1 was not found. Install the required version of Windows SDK or change the SDK version in the project property pages or by right-clicking the solution and selecting "Retarget solution".

我尝试从 CMake 传递 SDK 版本,使用 the only related CMake variable 我可以找到,通过将此标志添加到 msbuild:

"/p:WindowsTargetPlatformVersion=${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION}"

但是,我仍然遇到同样的错误。我尝试显示 CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION 变量的值,它似乎总是空的。

修改依赖关系 vcxproj 不是一个选项。我事先不知道需要构建项目的人安装了哪个 SDK 版本,所以这不是一个选项。

我找不到任何方法获取 SDK 版本并将其传递给外部项目构建,我做错了什么?

我发现了问题。我忘了设置platform toolset。我正在使用 v100 构建我的 CMake 项目,因此它不需要 SDK 版本。因为我没有为外部项目配置platform toolset,所以它使用了项目中最新的一套(v141),需要SDK版本。

所以添加这个标志修复了我的设置:

"/p:PlatformToolset=${CMAKE_VS_PLATFORM_TOOLSET}"