CMake - Как я могу передать версию Windows SDK в ExternalProject, созданный с помощью msbuild?

У меня есть проект CMake, который имеет внешнюю зависимость (Crypto++). Внешний проект имеет 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",

Я попытался передать версию SDK из CMake, используя единственную связанную переменную CMake, которую смог найти, добавив этот флаг в msbuild:

"/p:WindowsTargetPlatformVersion=${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION}"

Тем не менее, я все еще получаю ту же ошибку. Я пытался отобразить значение CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION переменная, и она всегда кажется пустой.

Изменение зависимости vcxproj это не вариант. Я заранее не знаю, какую версию SDK установил тот, кому нужно собрать проект, так что это не вариант.

Я не могу найти способ получить и передать версию SDK во внешнюю сборку проекта, что я делаю не так?

1 ответ

Решение

Я нашел проблему. Я забыл установить platform toolset, Я строил свой проект CMake с v100 так что ему не нужна версия SDK. Потому что я не настроил platform toolset для внешнего проекта использовался тот набор в проекте, который был самым последним (v141), для которого требовалась версия SDK.

Поэтому добавление этого флага исправило мои настройки:

"/p:PlatformToolset=${CMAKE_VS_PLATFORM_TOOLSET}"
Другие вопросы по тегам