1

我有一个具有外部依赖项(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 变量从 CMake 传递 SDK 版本,方法是将此标志添加到 msbuild:

"/p:WindowsTargetPlatformVersion=${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION}"

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

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

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

4

1 回答 1

1

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

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

"/p:PlatformToolset=${CMAKE_VS_PLATFORM_TOOLSET}"
于 2018-12-05T19:21:42.647 回答