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

У меня есть проект 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 Ответ

0 голосов
/ 05 декабря 2018

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

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

"/p:PlatformToolset=${CMAKE_VS_PLATFORM_TOOLSET}"
...