2012-12-18 47 views
4

對於與Visual Studio 2008在Windows下編譯C++網庫項目,我需要禁用觀檢查(見本主題:https://groups.google.com/forum/#!msg/cpp-netlib/G-hM25EnCWA/gdsHBaVfmggJ如何禁用Boost概念檢查

的編制工作在釋放,但不是在調試(在.cpp編譯時失敗)

我在包含客戶機頭之前通過定義NDEBUG來管理頭部的編譯。但是,如果鏈接器想要鏈接到Boost.system庫的Release版本,那麼以後會失敗:當我使用Debug時。我得到這個錯誤:

6> LINK:致命錯誤LNK1104:無法打開文件「libboost_system-VC90-MT-1_50.lib」

我想避免這種情況與BOOST_SYSTEM_NO_LIB,但它仍然要對鏈接發佈版本(我對'libboost_system-vc90-mt-gd-1_50.lib'(調試庫)的projet鏈接)

是否有一個簡單的宏定義在包含頭之前,哪些將禁用Boost.ConceptCheck的東西,就像在Release版本中完成的一樣?我沒有在Boost文檔中找到任何信息,也沒有在頭文件本身中找到任何信息。

非常感謝

的Gaetan

回答

3

這裏是我會做什麼:

#include <boost/concept/assert.hpp> 
// redefine concept assert, suppress the warning etc. 
#undef BOOST_CONCEPT_ASSERT 
#define BOOST_CONCEPT_ASSERT(Model) 
#include <boost/concept_check.hpp> 

struct not_an_iterator 
{}; 


int main() 
{ 
    BOOST_CONCEPT_ASSERT((InputIterator<not_an_iterator>)); 
    return 0; 
} 

這將使concept_assert什麼也不做,但我擔心它不會 以防止你的鏈接錯誤,這似乎很模糊。

+2

在重新定義它之前,我會'#undef BOOST_CONCEPT_ASSERT' –

+0

@JonathanWakely謝謝,做出了改變。 – pmr