簡體   English   中英

VS:如何配置DebugWithReleaseCRT?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM