一、Windows编辑、编译、调试、运行,最终在Linux下编译、运行

这是常规方法,以前我做的几个项目都是在Windows下使用Visual Studio进行编辑、编译、调试、运行,Windows下测试没什么问题了,然后在Linux下再编译、部署、运行。

这样做有许多好处,借助Visual Studio的强大功能,编写、编译、调试代码都会非常舒服,不需要使用命令行去操作这一切。但是也有一些问题: 1.由于Windows与Linux平台的一些API不同,需要维护与处理不同平台的API; 2.由于VS的编译器与GCC编译器有出入,会出现VS下可以编译链接通过,但是GCC下会编译链接不过,比如不同的C/C++标准,VS对C标准支持较全面的C89,不支持C99或者支持不全;对C++标准的支持,不同VS版本支持的情况不同,可以在微软官方查询。 3.字符编码。VS默认情况下只支持本地字符编码,对UTF8不支持或者支持不够;而GCC全面支持UTF8,也可以支持本地编码。

1.Windows

VS 2015及以后版本与标准C++的差距越来越小,建议使用VS 2015及以后版本。 在VS下,我们新建的文件一般都是本地编码,而不是使用的UTF8,而Linux下默认都是使用UTF8编码。为了达到统一的运行效果,可以在VS 2015中添加

1/execution-charset:utf-8
2/source-charset:GBK

选项,如图:

2.Linux

Linux下构建项目,可以使用的工具集就比较多,比较自由,但都是生成Makefile,然后使用make工具构建。 1)、使用autoconf、automake等配套工具生成Makefile 2)、使用configure脚本生成Makefile(很多开源项目都使用的这个) 3)、使用premake工具(编写Lua代码组织工程文件)生成Makefile 4)、直接写Makefile 5)、qmake工具生成Makefile(写qmake工程文件,还是比较好用) 6)、使用cmake生成Makefile

笔者使用过后面3种,直接写Makefile相对要难一些,qmake与cmake相对要容易一些。目前比较流行的是cmake,是一个跨平台的工具,可以生成Windows下的VS工程,也可以生成Makefile和其它工程,非常强大,很多开源软件都在使用cmake来构建。 btw:cmake本身不支持预编译,如果要使用预编译可以使用 cotire模块。

要让Windows VS下编辑的项目能在Linux下正常编译、运行,需要添加

1-finput-charset=GBK -fexec-charset=UTF8

来保证代码中写的字符串统一按UTF8来处理,这样就可以在代码中直接写中文字符串了。

需要注意的是:GCC使用预编译时不同时支持-finput-charset=GBK和头文件中使用#pragma once,否则如果有重复包含某个头文件会报错。 所以写头文件时,强烈建议使用宏检测技术来去除重复包含头文件。

二、Windows下编辑,远程编译、调试、运行

Sysprogs公司出了一款Visual Studio插件 VisualGDB,可以非常方便的在Viusal Studio中远程编译、调试、运行Linux程序。所以Windows下开发Linux程序,这是一个不错的选择,可以避免Windows与Linux API的不同,避免编译器的不同,专心开发Linux程序,而不管Windows。 VisualGDB下调试程序时,需要注意字符串编码问题,由于Linux与GDB默认都是使用的UTF8,而VS下是使用的UTF16,所以默认的VisualGDB调试时查看UTF8字符串时是乱码,如何解决请关注后面的博客: VisualGDB可视化调试STL,同时支持GCC的libstdc++与Clang的libc++中STL的常用容器。

这是我写的一个测试程序,可以从图中看出能够正常显示map,vector,list,set,string, const char*, char*等等类型。

祝好!