近日下載了一個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: " ?;
????}