added BUILD_WITH_STATIC_CRT option for static linking with CRT on MSVC
authorAlexander Shishkov <no@email>
Mon, 6 Jun 2011 10:26:59 +0000 (10:26 +0000)
committerAlexander Shishkov <no@email>
Mon, 6 Jun 2011 10:26:59 +0000 (10:26 +0000)
CMakeLists.txt
modules/ffmpeg/ffopencv.cpp

index abbfe69..8466b06 100644 (file)
@@ -100,6 +100,55 @@ endif()
 set(BUILD_SHARED_LIBS ON CACHE BOOL "Build shared libraries (.dll/.so) instead of static ones (.lib/.a)")\r
 \r
 # ----------------------------------------------------------------------------\r
+# Use statically or dynamically linked CRT?\r
+# Default: dynamic\r
+# ----------------------------------------------------------------------------\r
+if(MSVC AND NOT BUILD_SHARED_LIBS)\r
+  option (BUILD_WITH_STATIC_CRT "Enables use of staticaly linked CRT" OFF)\r
+endif()\r
+  \r
+if(MSVC)\r
+       if(BUILD_WITH_STATIC_CRT)\r
+               foreach(flag_var\r
+                               CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE\r
+                               CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO\r
+                               CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE\r
+                               CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO)\r
+                  if(${flag_var} MATCHES "/MD")\r
+                         string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")\r
+                  endif(${flag_var} MATCHES "/MD")\r
+\r
+                  if(${flag_var} MATCHES "/MDd")\r
+                         string(REGEX REPLACE "/MDd" "/MTd" ${flag_var} "${${flag_var}}")\r
+                  endif(${flag_var} MATCHES "/MDd")               \r
+               endforeach(flag_var)\r
+               \r
+               set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /NODEFAULTLIB:atlthunk.lib /NODEFAULTLIB:msvcrt.lib /NODEFAULTLIB:msvcrtd.lib")\r
+               \r
+               set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} /NODEFAULTLIB:libcmt.lib")\r
+               set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /NODEFAULTLIB:libcmtd.lib")\r
+                               \r
+       else(BUILD_WITH_STATIC_CRT)\r
+               foreach(flag_var\r
+                               CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE\r
+                               CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO\r
+                               CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE\r
+                               CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO)\r
+                  if(${flag_var} MATCHES "/MT")\r
+                         string(REGEX REPLACE "/MT" "/MD" ${flag_var} "${${flag_var}}")\r
+                  endif(${flag_var} MATCHES "/MT")\r
+\r
+                  if(${flag_var} MATCHES "/MTd")\r
+                         string(REGEX REPLACE "/MTd" "/MDd" ${flag_var} "${${flag_var}}")\r
+                  endif(${flag_var} MATCHES "/MTd")               \r
+               endforeach(flag_var)\r
+\r
+       endif(BUILD_WITH_STATIC_CRT)\r
+endif(MSVC)\r
+\r
+\r
+\r
+# ----------------------------------------------------------------------------\r
 #  Variables for cvconfig.h.cmake\r
 # ----------------------------------------------------------------------------\r
 set(PACKAGE "opencv")\r
index 4a3aa3a..44f83f8 100644 (file)
@@ -528,7 +528,9 @@ That's all there is to it!
 
 #if defined _MSC_VER && _MSC_VER >= 1200
 
+#if !defined(_MT) || defined(_DLL) 
 extern "C" { __declspec(dllexport) unsigned int __lc_codepage = 0; }
+#endif
 
 #pragma comment(lib, "libgcc_.a")
 #pragma comment(lib, "libmingwex_.a")