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}"
我有一个具有外部依赖项 (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}"