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}"