代码UTF8之路1:如何在QT项目中关闭C4819的警告

近日将整个项目的源码格式从GB2312转成了UTF8(无BOM)的格式,在QtCreator中编译时出现了著名的C4819警告:该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失。

虽然程序不影响,但大片的warning夹杂在其他有用的编译消息中却非常碍事,故决定搜索解决方案。

网上可以搜到大量的文章,但写的都一样,都是设置VC的项目属性,或者修改文件保存格式;或者在源代码中插入#pragma指令,又或者是替换文件的换行符之类的方法,但对于我来说都不适用,原因有:

  1. 我们使用QtCreator作为IDE环境,根本没有VC项目一说;
  2. 为跨平台开发,不能也不想再次转换文件编码格式;
  3. 项目文件众多,无法一一加入#pragma指令

所以确定从Qt的项目文件入手查询解决方案,因为最终是用VC的编译器进行编译,所有的编译命令(makefile)都是来自Qt的项目文件(pro文件)通过qmake程序生成的,所以项目文件中应该有方法指定这个编译选项来屏蔽此警告信息。

最后的解决方案很简单,是在项目文件中加入以下的定义:

# disable C4819 warning
QMAKE_CXXFLAGS_WARN_ON += -wd4819

这样再编译项目就不会显示这个C4819警告了。(可能需要先执行qmake,或者执行Rebuild)


注:我这里的生成环境是 Qt 5.10.1 + Visual Studio 2015。可能其他版本略有差异。

你可能感兴趣的:(QT,编程)