メモ
VC2010
コピペ https://msdn.microsoft.com/ja-jp/library/vstudio/abx4dbyh%28v=vs.100%29.aspx
C run-time library (without iostream or standard C++ library)
Associated DLL
Characteristics
Option
Preprocessor directives
libcmt.lib
None, static link.
Multithreaded, static link
/MT
_MT
msvcrt.lib
msvcr100.dll
Multithreaded, dynamic link (import library for MSVCR100.DLL). Be aware that if you use the Standard C++ Library, your program will need MSVCP100.DLL to run.
/MD
_MT, _DLL
libcmtd.lib
None, static link
Multithreaded, static link (debug)
/MTd
_DEBUG, _MT
msvcrtd.lib
msvcr100d.dll
Multithreaded, dynamic link (import library for MSVCR100D.DLL) (debug).
/MDd
_DEBUG, _MT, _DLL
msvcmrt.lib
None, static link
C Runtime static library. Used for mixed managed/native code.
/clr
/clr:oldSyntax
msvcurt.lib
None, static link
C Runtime static library compiled as 100% pure MSIL code. All code complies with the ECMA URT spec for MSIL.
/clr:pure
コピペ https://msdn.microsoft.com/en-us/library/abx4dbyh%28v=vs.100%29.aspx
Characteristics
Option
Preprocessor directives
LIBCPMT.LIB
Multithreaded, static link
/MT
_MT
MSVCPRT.LIB
Multithreaded, dynamic link (import library for MSVCP100.dll)
/MD
_MT, _DLL
LIBCPMTD.LIB
Multithreaded, static link
/MTd
_DEBUG, _MT
MSVCPRTD.LIB
Multithreaded, dynamic link (import library for MSVCP100D.DLL)
/MDd
_DEBUG, _MT, _DLL
コピペ https://msdn.microsoft.com/en-us/library/b0084kay.aspx
_M_CEE
Defined for a compilation that uses any form of /clr (/clr:oldSyntax , /clr:safe , for example).
_M_CEE_PURE
Defined for a compilation that uses /clr:pure .
_M_CEE_SAFE
Defined for a compilation that uses /clr:safe .
コピペ C:\Program Files\Microsoft Visual Studio 9.0\VC\include\use_ansi.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#if !defined(_M_CEE_PURE) && !defined(MRTDLL)
#if defined(_DLL) && !defined(_STATIC_CPPLIB)
#ifdef _DEBUG
#pragma comment(lib,"msvcprtd")
#else /* _DEBUG */
#pragma comment(lib,"msvcprt")
#endif /* _DEBUG */
#else /* _DLL && !STATIC_CPPLIB */
#ifdef _DEBUG
#pragma comment(lib,"libcpmtd")
#else /* _DEBUG */
#pragma comment(lib,"libcpmt")
#endif /* _DEBUG */
#endif /* _DLL && !STATIC_CPPLIB */
#endif /* !defined(_M_CEE_PURE) && !defined(MRTDLL) */
/MT
libcmt.libにスタティックにリンクする。Cランタイムコードは自分のEXEやDLLに埋め込まれる。DLLでは普通はこれを使わない。このオプションを指定するとコンパイラは_MTをdefineする。C++ソースコードはこのフラグによってC++ランタイムをpragma comment(lib…)でリンクする。/MTの場合はlibcpmt.libがリンクされる。これはスタティックライブラリで自分のEXEにCPPコードが埋め込まれる。
/MD
イ ンポートライブラリmsvcrt.libにリンクする。実行時にmsvcr100.dllにリンクされる。Cランタイムコードはmsvcr100.dll にある。DLLを作るときは通常これを使い、そうして作られたDLLを使うEXEをリンクするときも/MDを使う。そうすればランタイムが共有される。コンパイラは_MTと_DLLをdefineしその結果msvcprt.libがリンクされる、これはインポートライブラリで意実行時にmsvcp100.dllにリンクされる。/MDを使いCPPのリンクはスタティックで行いたいときは_STATIC_CPPLIBを定義する。
/clr:pure /clr
‘/clr’ と ‘/MT’ は同時に指定できないので、/MDになる。
pureをつけるとCランタイムがリンクされない。あとは不明