近日下载了一个VC2005 Express Edition,用它来编译boost,发现有不少的warning C4819,说代码文件中有cp936无法表示的字符,还有就是vc2005特有的废弃的ANSI函数的错误,虽说不影响编译,但是看着时不时出现的warning总是让人心神不安,还容易掩盖其他的错误,如果是直接用cl编译,只要加上/wd4819 /D_CRT_SECURE_NO_DEPRECATE就可以不显示这两个错误,但是大家都知道boost是使用其特有的boost.build进行编译的,下面我就给出如何修改boost.build来抑制这两个错误的显示

boost.build分为v1和v2两个版本
v1:
修改$(BOOST_ROOT)/tools/build/v1/vc-8_0-tools.jam

flags vc - 8_0 C ++ FLAGS :  / Zc:forScope ;

改为

flags vc - 8_0 C ++ FLAGS :  / Zc:forScope  / wd4819  / D_CRT_SECURE_NO_DEPRECATE ;

v2:
cvs版本
修改$(BOOST_ROOT)/tools/build/v2/tools/msvc.jam

8.0  adds some more options

一行的下方加上

flags msvc.compile CFLAGS $(condition) :  / wd4819  / D_CRT_SECURE_NO_DEPRECATE ;

boost 1.33.1版本

    #  8.0  deprecates some of the options
    
if   !  [ MATCH  ^ ([ 67 ]. * ) : $(version) ] 
    {
        flags msvc.compile CFLAGS $(condition)
/< optimization > speed :  / O2 ;
        flags msvc.compile CFLAGS $(condition)
/< optimization > space :  / O1 ;
        flags msvc.link.dll MANIFEST : 
" mt -manifest  "  ;
        flags msvc.link.dll OUTPUTRESOURCE : 
" -outputresource: "  ;
    }

改为:

    #  8.0  deprecates some of the options
    
if   !  [ MATCH  ^ ([ 67 ]. * ) : $(version) ] 
    {
        flags msvc.compile CFLAGS $(condition) : 
/ wd4819  / D_CRT_SECURE_NO_DEPRECATE ;
        flags msvc.compile CFLAGS $(condition)
/< optimization > speed :  / O2 ;
        flags msvc.compile CFLAGS $(condition)
/< optimization > space :  / O1 ;
        flags msvc.link.dll MANIFEST : 
" mt -manifest  "  ;
        flags msvc.link.dll OUTPUTRESOURCE : 
" -outputresource: "  ;
    }