[CMake] how to force msvc static C runtime libs?

McKay Davis mckay.cpp at gmail.com
Fri Sep 5 20:45:45 EDT 2008


My setup: Win XP, VS 9 2008 Express, CMake 2.6.1

I'm having trouble getting cmake to generate nmakefiles (or VS solutions) w/
the static C/C++ runtime lib flags.  I cannot figure out how to pass the
'/MT' flag (and NOT the /MD flag) to cl.exe.

My CMakeLists.txt is simple, with one directory, one lib, and one
executable.  It contains copies of lines 201-210 of
share/cmake-2.6/Modules/Platform/Windows-cl.cmake with the FORCE flag set:

SET (CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /Zm1000 /GX /GR" CACHE
STRING "flags" FORCE)
SET (CMAKE_CXX_FLAGS_DEBUG_INIT "/D_DEBUG /MTd /Zi  /Ob0 /Od /GZ" CACHE
STRING "flags" FORCE)
SET (CMAKE_CXX_FLAGS_MINSIZEREL_INIT "/MT /O1 /Ob1 /D NDEBUG" CACHE STRING
"flags" FORCE)
SET (CMAKE_CXX_FLAGS_RELEASE_INIT "/MT /O2 /Ob2 /D NDEBUG" CACHE STRING
"flags" FORCE)
SET (CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT "/MT /Zi /O2 /Ob1 /D NDEBUG" CACHE
STRING "flags" FORCE)
SET (CMAKE_C_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /Zm1000" CACHE STRING
"flags" FORCE)
SET (CMAKE_C_FLAGS_DEBUG_INIT "/D_DEBUG /MTd /Zi  /Ob0 /Od /GZ" CACHE STRING
"flags" FORCE)
SET (CMAKE_C_FLAGS_MINSIZEREL_INIT "/MT /O1 /Ob1 /D NDEBUG" CACHE STRING
"flags" FORCE)
SET (CMAKE_C_FLAGS_RELEASE_INIT "/MT /O2 /Ob2 /D NDEBUG" CACHE STRING
"flags" FORCE)
SET (CMAKE_C_FLAGS_RELWITHDEBINFO_INIT "/MT /Zi /O2 /Ob1 /D NDEBUG" CACHE
STRING "flags" FORCE)

These seem to only affect the *_INIT vars, because after running cmake
inspecting the cache reveals:

> grep ^CMAKE_CX*_FLAGS CMakeCache.txt'

CMAKE_CXX_FLAGS:STRING= /DWIN32 /D_WINDOWS /W3 /Zm1000 /EHsc /GR
CMAKE_CXX_FLAGS_DEBUG:STRING=/D_DEBUG /MDd /Zi /Ob0 /Od /RTC1
CMAKE_CXX_FLAGS_DEBUG_INIT:STRING=/D_DEBUG /MTd /Zi  /Ob0 /Od /GZ
CMAKE_CXX_FLAGS_INIT:STRING=/DWIN32 /D_WINDOWS /W3 /Zm1000 /GX /GR
CMAKE_CXX_FLAGS_MINSIZEREL:STRING=/MD /O1 /Ob1 /D NDEBUG
CMAKE_CXX_FLAGS_MINSIZEREL_INIT:STRING=/MT /O1 /Ob1 /D NDEBUG
CMAKE_CXX_FLAGS_RELEASE:STRING=/MD /O2 /Ob2 /D NDEBUG
CMAKE_CXX_FLAGS_RELEASE_INIT:STRING=/MT /O2 /Ob2 /D NDEBUG
CMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING=/MD /Zi /O2 /Ob1 /D NDEBUG
CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT:STRING=/MT /Zi /O2 /Ob1 /D NDEBUG
CMAKE_C_FLAGS:STRING= /DWIN32 /D_WINDOWS /W3 /Zm1000
CMAKE_C_FLAGS_DEBUG:STRING=/D_DEBUG /MDd /Zi  /Ob0 /Od /RTC1
CMAKE_C_FLAGS_DEBUG_INIT:STRING=/D_DEBUG /MTd /Zi  /Ob0 /Od /GZ
CMAKE_C_FLAGS_INIT:STRING=/DWIN32 /D_WINDOWS /W3 /Zm1000
CMAKE_C_FLAGS_MINSIZEREL:STRING=/MD /O1 /Ob1 /D NDEBUG
CMAKE_C_FLAGS_MINSIZEREL_INIT:STRING=/MT /O1 /Ob1 /D NDEBUG
CMAKE_C_FLAGS_RELEASE:STRING=/MD /O2 /Ob2 /D NDEBUG
CMAKE_C_FLAGS_RELEASE_INIT:STRING=/MT /O2 /Ob2 /D NDEBUG
CMAKE_C_FLAGS_RELWITHDEBINFO:STRING=/MD /Zi /O2 /Ob1 /D NDEBUG
CMAKE_C_FLAGS_RELWITHDEBINFO_INIT:STRING=/MT /Zi /O2 /Ob1 /D NDEBUG
...

What should I do to get cmake to build w/ the static C runtime libs?

Thanks,

-McKay Davis
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.cmake.org/pipermail/cmake/attachments/20080905/fd529d95/attachment.htm>


More information about the CMake mailing list