View Issue Details Jump to Notes ] Print ]
IDProjectCategoryView StatusDate SubmittedLast Update
0016104CMakeCMakepublic2016-05-15 06:352016-06-10 14:21
ReporterVladislav K. 
Assigned To 
PriorityhighSeverityminorReproducibilityalways
StatusclosedResolutionwon't fix 
PlatformWin32 or Win64OSWindowsOS VersionAll
Product VersionCMake 3.5.2 
Target VersionFixed in Version 
Summary0016104: The extra escape sequence \${...} in the generated export file
DescriptionThe extra escape sequence \${} in the generated export file

#
   if (UNIX)
      set(_build_type ${CMAKE_BUILD_TYPE} )
   else()
         set(_build_type \${BUILD_TYPE} ) #previously \@BUILD_TYPE@
   endif()

      install( TARGETS ${TARGETNAME}
               EXPORT ${EXPORT_NAME}
               RUNTIME DESTINATION ${_build_type}/bin
               LIBRARY DESTINATION ${_build_type}/lib
               ARCHIVE DESTINATION ${_build_type}/lib
             )
...In cmake 3.5.2 in the performance of the export file, an error occurs


Ok.
# in cmake_install.cmake 3.0.0 or 3.5.2 ---> ${BUILD_TYPE}
file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/Win64/VC12/${BUILD_TYPE}/lib" TYPE STATIC_LIBRARY OPTIONAL FILES "X:/CTVMO/bm/build_cm-vc12-win64/Win64/VC12/Debug/lib/bm-system-mem-debug.lib")

Ok.
 # in bm-export-debug.cmake 3.0.0 ---> ${BUILD_TYPE}
# Import target "bm-system-mem" for configuration "Debug"
set_property(TARGET bm-system-mem APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG)
set_target_properties(bm-system-mem PROPERTIES
  IMPORTED_IMPLIB_DEBUG "${_IMPORT_PREFIX}/Win64/VC12/${BUILD_TYPE}/lib/bm-system-mem-debug.lib"

IMPORTED_LINK_INTERFACE_LIBRARIES_DEBUG "Psapi;Winmm;rpcrt4;X:/CTVMO/ext_sdk/sdk/libs/win64/VC12/zlib1d.lib;X:/CTVMO/ext_sdk/sdk/libs/win64/VC12/libbz2d.lib"
  IMPORTED_LOCATION_DEBUG "${_IMPORT_PREFIX}/Win64/VC12/${BUILD_TYPE}/bin/bm-system-mem-debug.dll"
  )

Error.
 # in bm-export-debug.cmake 3.5.2 ----> \${_BUILD_TYPE}.
# Import target "bm-system-mem" for configuration "Debug"
set_property(TARGET bm-system-mem APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG)
set_target_properties(bm-system-mem PROPERTIES
  IMPORTED_IMPLIB_DEBUG "${_IMPORT_PREFIX}/Win32/VC12/\${_BUILD_TYPE}/lib/bm-system-mem-debug.lib"
  IMPORTED_LINK_INTERFACE_LIBRARIES_DEBUG "Psapi;Winmm;rpcrt4;X:/CTVMO/ext_sdk/sdk/libs/Win32/VC12/zlib1d.lib;X:/CTVMO/ext_sdk/sdk/libs/Win32/VC12/libbz2d.lib"
  IMPORTED_LOCATION_DEBUG "${_IMPORT_PREFIX}/Win32/VC12/\${_BUILD_TYPE}/bin/bm-system-mem-debug.dll"
  )

cmake 3.5.2 Beat changes in cmExportFileGenerator.cxx: cmExportFileGenerator::GenerateImportPropertyCode(...
1152 os << " " << pi->first << " "
1153 << cmExportFileGeneratorEscape(pi->second) << "\n";

previously in cmake 3.0.0 cmExportFileGenerator.cxx: cmExportFileGenerator::GenerateImportPropertyCode(...
1026 os << " " << pi->first << " \"" << pi->second << "\"\n";


As a special case the error is eliminated by changing in
//----------------------------------------------------------------------------
static std::string cmExportFileGeneratorEscape(std::string const& str)
{
  // Escape a property value for writing into a .cmake file.
  std::string result = cmOutputConverter::EscapeForCMake(str);
  // Un-escape variable references generated by our own export code.
  cmSystemTools::ReplaceString(result,
                               "\\${_IMPORT_PREFIX}",
                               "${_IMPORT_PREFIX}");
  cmSystemTools::ReplaceString(result,
                               "\\${CMAKE_IMPORT_LIBRARY_SUFFIX}",
                               "${CMAKE_IMPORT_LIBRARY_SUFFIX}");
////////////////////////////////////////////////////////////////////
// My insert vvvvvv
  cmSystemTools::ReplaceString(result,
                               "\\${BUILD_TYPE}",
                               "${BUILD_TYPE}");
//End my insert
///////////////////////////////////////////////////////////////////
  return result;
}

P.S.
Use \@BUILD_TYPE@ in cmake 3.0.0 Ok.
Warning in cmake 3.5.2:
 To many warning of use @BUILD_TYPE@ instead @BUILD_TYPE@ by run cmake_install.cmake
 No way to set cmake policy CMP0053 in cmake_install.cmake
TagsNo tags attached.
Attached Files

 Relationships

  Notes
(0041065)
Brad King (manager)
2016-05-16 09:23

This is due to a bug fix in CMake 3.4:

 Export: Escape exported property values when writing CMake language files
 https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=60eb396f [^]

Prior to CMake 3.3 we did not officially support per-config install destinations and the \${BUILD_TYPE} trick was an unofficial workaround. Since CMake 3.3 we support generator expressions in the install destination of install(TARGETS):

 set(_build_type $<CONFIGURATION>)
(0041172)
Kitware Robot (administrator)
2016-06-10 14:21

This issue tracker is no longer used. Further discussion of this issue may take place in the current CMake Issues page linked in the banner at the top of this page.

 Issue History
Date Modified Username Field Change
2016-05-15 06:35 Vladislav K. New Issue
2016-05-16 09:23 Brad King Note Added: 0041065
2016-05-16 09:23 Brad King Severity crash => minor
2016-05-16 09:23 Brad King Status new => resolved
2016-05-16 09:23 Brad King Resolution open => won't fix
2016-06-10 14:21 Kitware Robot Note Added: 0041172
2016-06-10 14:21 Kitware Robot Status resolved => closed


Copyright © 2000 - 2018 MantisBT Team