MSVCRuntime.cmake 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. macro(configure_msvc_runtime)
  2. if(MSVC)
  3. # Default to statically-linked runtime.
  4. if("${MSVC_RUNTIME}" STREQUAL "")
  5. set(MSVC_RUNTIME "dynamic")
  6. endif()
  7. # Set compiler options.
  8. set(variables
  9. CMAKE_C_FLAGS
  10. CMAKE_C_FLAGS_DEBUG
  11. CMAKE_C_FLAGS_MINSIZEREL
  12. CMAKE_C_FLAGS_RELEASE
  13. CMAKE_C_FLAGS_RELWITHDEBINFO
  14. CMAKE_CXX_FLAGS
  15. CMAKE_CXX_FLAGS_DEBUG
  16. CMAKE_CXX_FLAGS_MINSIZEREL
  17. CMAKE_CXX_FLAGS_RELEASE
  18. CMAKE_CXX_FLAGS_RELWITHDEBINFO)
  19. if(${MSVC_RUNTIME} STREQUAL "static")
  20. message(STATUS "MSVC: using statically-linked runtime (/MT and /MTd).")
  21. foreach(variable ${variables})
  22. if(${variable} MATCHES "/MD")
  23. string(REGEX REPLACE "/MD" "/MT" ${variable} "${${variable}}")
  24. endif()
  25. endforeach()
  26. else()
  27. message(STATUS "MSVC: using dynamically-linked runtime (/MD and /MDd).")
  28. foreach(variable ${variables})
  29. if(${variable} MATCHES "/MT")
  30. string(REGEX REPLACE "/MT" "/MD" ${variable} "${${variable}}")
  31. endif()
  32. endforeach()
  33. endif()
  34. foreach(variable ${variables})
  35. if(${variable} MATCHES "/Ob0")
  36. string(REGEX REPLACE "/Ob0" "/Ob2" ${variable} "${${variable}}")
  37. endif()
  38. endforeach()
  39. foreach(variable ${variables})
  40. if(${variable} MATCHES "/W3")
  41. string(REGEX REPLACE "/W3" "/W2" ${variable} "${${variable}}")
  42. endif()
  43. endforeach()
  44. set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS}")
  45. set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}")
  46. set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}")
  47. set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_C_FLAGS_MINSIZEREL}")
  48. set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO}")
  49. foreach(variable ${variables})
  50. set(${variable} "${${variable}}" CACHE STRING "MSVC_${variable}" FORCE)
  51. endforeach()
  52. endif()
  53. endmacro(configure_msvc_runtime)