在Linux下用QtCreator编译C++源码
前言
昨天折腾了一天,要把在Visual Studio上的一个C++工程到Linux系统上编译,简单的C++程序直接写makefile或者g++命令行编译,但是这个工程有十几个cpp文件和h头文件,互相之间有依赖关系,还要依赖boost库,makefile会很复杂也费时,最终借助Linux下的一款叫QtCreator的IDE编译成功了,QtCreator比Clion编译更快。总结一下一些小经验,方便其他有需要的人。
步骤
(我的Linux虚拟机装的CentOS)
1、先安装g++
sudo yum install gcc gcc-c++
2、安装cmake
sudo yum install cmake
3、下载qt-creator
选择Linux-64bit版本,下载后得到qt-creator的.run文件,运行该文件安装,我的版本是4.1.0
4、写cmake文件
安装好就可以在Application-Programming中看到qtcreator了,新建项目,并将所有的.cpp和.h文件放到工程目录下。在qt的Build下点击Run Cmake,生成cmake的基本模板,根据需要在其中修改。第一次用cmake,并不太懂。把了解的写一写。
第一行代表project名字
第二行是cmake的版本
第三行是要使cmake使用c++11编译选项,在编译过程中遇到很多类似于string变量没有.front()方法的问题都是因为没有指明要使用c++11新特性。
第四行和第五行是添加boost库的,其中boost库事先已安装(yum install boost;yum install boost-devel),在RedHat系库的头文件和源码是分开的所以要安装两个package。
第六行是说把当前目录下的文件都放到src_list中,第七行用这些文件编译生成GraphAdaptation(自定义)可执行文件
第八行将该执行文件与boost库连接
5、编译运行
qt中build-build all就可以得到编译文件啦,会生成一个结果文件夹,里面有可执行文件,可以选择debug下还是release下编译得到的文件夹不同,release进行了优化。
问题
visual studio下可以运行的代码可能发现在linux下编译报错,这些几乎都可以在stackoverflow上找到答案。我遇到的一些问题和解决方法。
1、在构造函数中ifstream无copy函数,因此
inputFile = std::ifstream(inputFileName) //error
改成构造函数的参数列表形式
inputFile(inputFileName,std::ifstream::in) //correct
std::ofstream同理
2、在vs中使用的类似 windows.h 这类文件要全部改掉,linux中并没有与此直接对应的API,所以要重新定义函数。
3、调用了std::to_string()方法,error: ‘to_string’ is not a member of ‘std’
解决方法是写一个std::to_string()替换标准库中的
首先写一个stdtostring.h文件
然后在需要使用 std::to_string() 方法的源文件中包含它: