[英]VS: How to configure DebugWithReleaseCRT?
我在我們的CMake腳本中添加了一個新的配置DebugWithReleaseCRT
,該腳本基於漂亮的標准Debug
配置,但與Release CRT( /MD
代替/MDd
)鏈接並定義_ITERATOR_DEBUG_LEVEL=0
。 我檢查了生成的項目文件設置,一切看起來都不錯:
C / C ++->代碼生成-> RuntimeLibrary =多線程DLL(/ MD)
但是,當我構建它時,我得到如下錯誤:
3> 3rd-party.lib(3rd-party.obj):錯誤LNK2038:檢測到“ RuntimeLibrary”的不匹配:值“ MD_DynamicRelease”與My.obj中的值“ MDd_DynamicDebug”不匹配
我讀為:
當您嘗試鏈接使用發行版CRT(
MD_DynamicRelease
)構建的庫3rd-party.lib
,將使用調試CRT(MDd_DynamicDebug
)編譯My.cpp
文件。
我還檢查了此特定文件( My.cpp
)的設置,但是那里沒有任何花哨的地方,它從父項目繼承了/MD
標志。
為什么盡管指定了/MD
標志,但我的項目仍與Debug CRT鏈接?
問題與VS預編譯器定義_DEBUG有關
當指定/ MTd或/ MDd選項時,編譯器將定義_DEBUG。 這些選項指定C運行時庫的調試版本。
由於我的DebugWithReleaseCRT
配置基於Debug
,因此它也復制了_DEBUG
定義。 事實證明,如果定義了_DEBUG
,它將否決/MD
標志( MD_DynamicRelease
),而VS仍與調試CRT鏈接(嘿,Visual Studio團隊,這真是令人驚訝!)。
通過從DebugWithReleaseCRT
刪除_DEBUG
解決了該問題。 實際上,它是通過用NDEBUG
替換_DEBUG
來解決的,因為某些第三方依賴項需要精確地定義其中之一。 我仍然不確定這是配置DebugWithReleaseCRT
的一種干凈方法,我對使用調試配置定義NDEBUG
並不特別有信心。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.