[cmake-developers] [CMake 0016073]: InstallRequiredSystemLibraries needs updating for MSVS2015
Mantis Bug Tracker
mantis at public.kitware.com
Thu Apr 21 03:38:50 EDT 2016
The following issue has been SUBMITTED.
======================================================================
https://cmake.org/Bug/view.php?id=16073
======================================================================
Reported By: Lewoco
Assigned To:
======================================================================
Project: CMake
Issue ID: 16073
Category: Modules
Reproducibility: always
Severity: minor
Priority: normal
Status: new
======================================================================
Date Submitted: 2016-04-21 03:38 EDT
Last Modified: 2016-04-21 03:38 EDT
======================================================================
Summary: InstallRequiredSystemLibraries needs updating for
MSVS2015
Description:
Many system DLL's required by MSVS2015 are not identified by
InstallRequiredSystemLibraries.
Steps to Reproduce:
- add_executable a simple hello world
- Use InstallRequiredSystemLibraries to install the required libraries
- Build an installer using WiX (or whatever)
- Install it on Windows 7 (no updates)
BUG: executable cannot be run because of missing DLL's.
Note:
- Updates might have helped but I didn't try it.
- Probably also affects Windows 8/8.1.
- Might not affect Windows 10? (see link)
https://blogs.msdn.microsoft.com/vcblog/2015/03/03/introducing-the-universal-crt/
Additional Information:
Right now I'm using the following code to select the additional required
libraries. Please integrate something similar into
InstallRequiredSystemLibraries:
# InstallRequiredSystemLibraries does not properly support MSVS 14 yet, so do it
manually.
unset(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_DEBUG)
unset(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_RELEASE)
if(DEFINED MSVC_VERSION AND NOT MSVC_VERSION LESS 1900)
# Internal: Architecture-appropriate library directory names.
if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "ARM")
set(_winsdk_arch8 arm) # what the WDK for Win8+ calls this architecture
else()
if(CMAKE_SIZEOF_VOID_P MATCHES "8")
set(_winsdk_arch8 x64) # what the WDK for Win8+ calls this
architecture
else()
set(_winsdk_arch8 x86) # what the WDK for Win8+ calls this
architecture
endif()
endif()
# The CRT is distributed with MSVS.
get_filename_component(MSVS_DIR
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\14.0;ShellFolder]"
ABSOLUTE)
# As of MSVC 19 the CRT depends on the 'univeral' CRT (which is part of
Windows development kit 10 and above).
#
http://blogs.msdn.com/b/vcblog/archive/2015/03/03/introducing-the-universal-crt.aspx
get_filename_component(WINDOWS_KIT_DIR
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows Kits\\Installed
Roots;KitsRoot10]" ABSOLUTE)
file(GLOB CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_DEBUG
"${MSVS_DIR}/VC/redist/debug_nonredist/${_winsdk_arch8}/Microsoft.VC140.DebugCRT/*.dll"
"${WINDOWS_KIT_DIR}/Redist/ucrt/DLLs/${_winsdk_arch8}/api-ms-win-*.dll"
"${WINDOWS_KIT_DIR}/bin/${_winsdk_arch8}/ucrt/*.dll"
)
file(GLOB CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_RELEASE
"${MSVS_DIR}/VC/redist/${_winsdk_arch8}/Microsoft.VC140.CRT/*.dll"
"${WINDOWS_KIT_DIR}/Redist/ucrt/DLLs/${_winsdk_arch8}/*.dll"
)
endif()
======================================================================
Issue History
Date Modified Username Field Change
======================================================================
2016-04-21 03:38 Lewoco New Issue
======================================================================
More information about the cmake-developers
mailing list