diff --git a/cmake/modules/CreateTempFile.cmake b/cmake/modules/CreateTempFile.cmake index ceefa4928..5210342ac 100644 --- a/cmake/modules/CreateTempFile.cmake +++ b/cmake/modules/CreateTempFile.cmake @@ -1,5 +1,5 @@ function(CreateTempFilePath) - set(options) + set(options CONFIG_SUFFIX) set(oneValueArgs OUTPUT_VAR TAG) set(multiValueArgs CONTENT) cmake_parse_arguments(TEMP "${options}" "${oneValueArgs}" @@ -10,9 +10,12 @@ function(CreateTempFilePath) string(SHA1 hashed_content "${TEMP_CONTENT}") set(file_name "${CMAKE_BINARY_DIR}/${TEMP_TAG}_${hashed_content}") + set(${TEMP_OUTPUT_VAR} "${file_name}" PARENT_SCOPE) + if(CONFIG_SUFFIX) + set(file_name "${file_name}_$") + endif() file(GENERATE OUTPUT "${file_name}" CONTENT "${TEMP_CONTENT}") - set(${TEMP_OUTPUT_VAR} "${file_name}" PARENT_SCOPE) endfunction() diff --git a/cmake/modules/DefineInstallVar.cmake b/cmake/modules/DefineInstallVar.cmake index 36f221410..b13cb1d52 100644 --- a/cmake/modules/DefineInstallVar.cmake +++ b/cmake/modules/DefineInstallVar.cmake @@ -14,13 +14,14 @@ function(DEFINE_INSTALL_VAR) # install(CODE) does not support generator expression in ver<3.14 if(VAR_GENERATOR_EXPRESSION AND ${CMAKE_VERSION} VERSION_LESS "3.14.0") - if(MSVC) - message(FATAL_ERROR "Installing is not supported with msvc and cmake<3.14") - endif() - include(CreateTempFile) - CreateTempFilePath(OUTPUT_VAR file_path TAG "${VAR_NAME}" CONTENT "${VAR_CONTENT}") - install(CODE "file(READ \"${file_path}\" \"${VAR_NAME}\")") + if(CMAKE_CONFIGURATION_TYPES) # in case of multi-config generators like MSVC generators + CreateTempFilePath(OUTPUT_VAR file_path TAG "${VAR_NAME}" CONTENT "${VAR_CONTENT}" CONFIG_SUFFIX) + install(CODE "file(READ \"${file_path}_\${CMAKE_INSTALL_CONFIG_NAME}\" \"${VAR_NAME}\")") + else() + CreateTempFilePath(OUTPUT_VAR file_path TAG "${VAR_NAME}" CONTENT "${VAR_CONTENT}") + install(CODE "file(READ \"${file_path}\" \"${VAR_NAME}\")") + endif() else() if(VAR_GENERATOR_EXPRESSION) cmake_policy(SET CMP0087 NEW)