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