1. 程式人生 > >VS編譯方式 \MT \MD \MTd \MDd

VS編譯方式 \MT \MD \MTd \MDd

在工程上右鍵-》屬性-》c/c++-》程式碼生成-》執行庫

其中四個選項的對應含義如下:

多執行緒除錯Dll (/MDd) 對應的是MD_DynamicDebug

多執行緒Dll (/MD) 對應的是MD_DynamicRelease

多執行緒(/MT) 對應的是MD_StaticRelease

多執行緒(/MTd)對應的是MD_StaticDebug


MSDN中的描述如下:


/MD 
使應用程式使用執行時庫的多執行緒並特定於DLL 的版本。定義 _MT 和 _DLL,並使編譯器將庫名 MSVCRT.lib 放入 .obj檔案中。
用此選項編譯的應用程式靜態連結到MSVCRT.lib。該庫提供允許連結器解析外部引用的程式碼層。實際工作程式碼包含在 MSVCR90.DLL, 中,該庫必須在執行時對於與MSVCRT.lib 連結的應用程式可用。

當/MD 與 _STATIC_CPPLIB 前處理器定義 (/D_STATIC_CPPLIB)一起使用時,您的應用程式將與靜態多執行緒標準 C++ 庫 (libcpmt.lib) 而非動態版本 (msvcprt.lib)連結,但仍通過 msvcrt.lib 動態連結到主 CRT。
請注意,不支援_STATIC_CPPLIB 前處理器定義和 /clr 或 /clr:pure 編譯器選項的組合。有關 /clr選項的限制的更多資訊,請參見 /clr 限制。

/MDd 
 定義_DEBUG、_MT 和 _DLL,並使應用程式使用執行時庫的除錯多執行緒並特定於 DLL 的版本。它還使編譯器將庫名MSVCRTD.lib 放入 .obj 檔案中。


/MT 
 使應用程式使用執行時庫的多執行緒靜態版本。定義_MT 並使編譯器將庫名 LIBCMT.lib 放入 .obj 檔案中,以便連結器使用 LIBCMT.lib解析外部符號。

/MTd 
 定義_DEBUG 和 _MT。此選項還使編譯器將庫名 LIBCMTD.lib 放入 .obj 檔案中,以便連結器使用LIBCMTD.lib 解析外部符號。

使用MT可以減少對很多VS自帶庫的潛在依賴,但是採用MT時,自身所引用的lib等都要採用相同的編譯方式得來,即所有模組的生成方式應當保持一致性。

在MFC中 若要使用MT編譯方式 則 屬性->常規中MFC的使用應該改為 在靜態中使用MFC