如何将Visual Studio的工程转成QT的工程
2016-01-21 23:30
295 查看
本人QT生手,最近项目上却有个需求,要将原本的Visual Studio的project转成QT Creator的project。在进行了一番研究和动手实践以及再研究再实践之后,终于成功完成了这一转换,特此记录。
环境:
- Visual Studio 2013 (Ultimate)
- QT 5.5 Community
- 原本的VS工程是一个生成dll的工程
- 原本的VS工程其实是基于QT Template的工程
(安装了QT的VS插件,就可以在VS里建立基于QT template的工程。但是这里又有故事了。对于Visual Studio 2013,插件(add-in)已经不再是推荐的方式,推荐的方式叫做package或extension。所以一旦你安装了QT的插件(往往是2012版的),再想卸载它就无比困难了,就连MSDN上也没能写一个很清晰的解决方案,而网上的解决方案多为修改注册表,笔者没有试过,不知道能否卸载干净。)
先介绍一下QT工程的特点。相比于VS,QT的工程文件很简单,就是一个.pro文件,当然,有的时候还有.pri文件和.pro.user文件。.pro文件的目的是为了实现cross platform,即跨平台。.pro文件的内容都是配置信息,比如指明头文件所在,库文件所在,库文件名,目标文件名等等。.pri文件也是一种.pro文件,只是因为它是假定要被某.pro文件include的,所以叫.pri而没有叫.pro文件。在我的实例当中,.pri文件中主要是HEADERS和SOURCES,分别代表头文件和源文件。最后,.pro.user文件是一个xml文件,它是自动生成的,主要记录的是QT
Creator里项目的配置信息,包括一些系统的环境变量等。
关于.pro文件的内容以及如何编写.pro文件,网上有很多不错的文章,这里就不赘述了。贴几篇文章的链接如下:
10分钟学会qmake
qmake教程
qmake概念
qmake高级概念
qmake命令参考
一篇转了以上所有文章的文章
以上谈.pro文件的时候还谈到了qmake,那么它是什么呢?为何说.pro文件是为了跨平台而写的呢?原来,qmake是Trolltech公司(于2008年被诺基亚收购)创建的用来为不同的平台和编译器书写Makefile的工具。手写Makefile是比较困难并且容易出错的,尤其是需要给不同的平台和编译器组合写几个Makefile。使用qmake,开发者创建一个简单的“项目”文件(即.pro文件)并且运行qmake生成适当的Makefile。qmake会注意所有的编译器和平台的依赖性,可以把开发者解放出来只关心他们的代码。Trolltech公司使用qmake作为Qt库和Qt所提供的工具的主要连编工具。
那么了解了qmake和.pro文件的写法之后,再来看看我的转换历程吧。
第一步,因为原Visual Studio工程就是基于QT Template的工程,所以我们可以用VS里的QT插件里的"Create basic .pro file..."菜单选项来自动生成一个.pro文件,实际上,不仅仅生成了.pro 文件,还生成了.pri文件。但是目前的.pro文件还是不能用的,因为其中还有大量的配置需要修改,比如INCLUDEPATH和LIBS.
第二步,修改.pro文件使其包含正确而必要的配置信息。
总结笔者对.pro文件的具体修改如下:
1. TEMPLATE = lib
2. 将DESTDIR = xxx改成:
Release:DESTDIR = xxx/Release
Debug:DESTDIR = xxx/Debug
3. CONFIG += debug_and_release
4. 完善INCLUDEPATH
5. 完善DEPENDPATH (这里又有故事了:事后笔者发现,只要在LIBS里写了-L"<LIBPATH>",就没必要写DEPENDPATH了。)
6. 加上 Release:DEPENDPATH 和 Debug:DEPENDPATH
7. 类似的,完善LIBS,添加Release:LIBS和Debug:LIBS
第三步,双击改好的.pro文件,QT Creator打开此工程,选中合适的Kit,就可以build了。因为是64位机器,Kit选的是QT 5.5.1的msvc2013_64.
最后千万要注意的是,在系统环境变量%PATH%里,对于Visual Studio的编译器cl.exe和链接器link.exe, 要选对路径。比如,对于64位的机器,路径 C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\amd64 应该被加到%PATH%中,而不是 C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin 这一条在前一篇博文中已有详细阐述。
以上步骤做完后,就可以顺利地在QT Creator中进行build了。
最后还要提醒的一点是,如果更改了.pro文件,想让更改生效,必须手动删除qmake生成的Makefile, Makefile.Debug和Makefile.Release文件。
下面是一个.pro文件的实例:
在实际build的过程中,笔者又发现QT是调用jom.exe去做的。这是个什么呢?原来,在VS里面,有一个工具叫做nmake,它和Linux上的make很像。但是这个nmake有一个缺点(笔者不确定现在还有没有这个缺点,但在2009年的时候是有的),就是它无法利用多核的优势并行编译。于是,就有人写了这么一个叫做jom的工具,类似于是多线程版本的nmake. 最初的那篇介绍jom的文章在这里: http://blog.qt.io/blog/2009/03/27/speeding-up-visual-c-qt-builds/
环境:
- Visual Studio 2013 (Ultimate)
- QT 5.5 Community
- 原本的VS工程是一个生成dll的工程
- 原本的VS工程其实是基于QT Template的工程
(安装了QT的VS插件,就可以在VS里建立基于QT template的工程。但是这里又有故事了。对于Visual Studio 2013,插件(add-in)已经不再是推荐的方式,推荐的方式叫做package或extension。所以一旦你安装了QT的插件(往往是2012版的),再想卸载它就无比困难了,就连MSDN上也没能写一个很清晰的解决方案,而网上的解决方案多为修改注册表,笔者没有试过,不知道能否卸载干净。)
先介绍一下QT工程的特点。相比于VS,QT的工程文件很简单,就是一个.pro文件,当然,有的时候还有.pri文件和.pro.user文件。.pro文件的目的是为了实现cross platform,即跨平台。.pro文件的内容都是配置信息,比如指明头文件所在,库文件所在,库文件名,目标文件名等等。.pri文件也是一种.pro文件,只是因为它是假定要被某.pro文件include的,所以叫.pri而没有叫.pro文件。在我的实例当中,.pri文件中主要是HEADERS和SOURCES,分别代表头文件和源文件。最后,.pro.user文件是一个xml文件,它是自动生成的,主要记录的是QT
Creator里项目的配置信息,包括一些系统的环境变量等。
关于.pro文件的内容以及如何编写.pro文件,网上有很多不错的文章,这里就不赘述了。贴几篇文章的链接如下:
10分钟学会qmake
qmake教程
qmake概念
qmake高级概念
qmake命令参考
一篇转了以上所有文章的文章
以上谈.pro文件的时候还谈到了qmake,那么它是什么呢?为何说.pro文件是为了跨平台而写的呢?原来,qmake是Trolltech公司(于2008年被诺基亚收购)创建的用来为不同的平台和编译器书写Makefile的工具。手写Makefile是比较困难并且容易出错的,尤其是需要给不同的平台和编译器组合写几个Makefile。使用qmake,开发者创建一个简单的“项目”文件(即.pro文件)并且运行qmake生成适当的Makefile。qmake会注意所有的编译器和平台的依赖性,可以把开发者解放出来只关心他们的代码。Trolltech公司使用qmake作为Qt库和Qt所提供的工具的主要连编工具。
那么了解了qmake和.pro文件的写法之后,再来看看我的转换历程吧。
第一步,因为原Visual Studio工程就是基于QT Template的工程,所以我们可以用VS里的QT插件里的"Create basic .pro file..."菜单选项来自动生成一个.pro文件,实际上,不仅仅生成了.pro 文件,还生成了.pri文件。但是目前的.pro文件还是不能用的,因为其中还有大量的配置需要修改,比如INCLUDEPATH和LIBS.
第二步,修改.pro文件使其包含正确而必要的配置信息。
总结笔者对.pro文件的具体修改如下:
1. TEMPLATE = lib
2. 将DESTDIR = xxx改成:
Release:DESTDIR = xxx/Release
Debug:DESTDIR = xxx/Debug
3. CONFIG += debug_and_release
4. 完善INCLUDEPATH
5. 完善DEPENDPATH (这里又有故事了:事后笔者发现,只要在LIBS里写了-L"<LIBPATH>",就没必要写DEPENDPATH了。)
6. 加上 Release:DEPENDPATH 和 Debug:DEPENDPATH
7. 类似的,完善LIBS,添加Release:LIBS和Debug:LIBS
第三步,双击改好的.pro文件,QT Creator打开此工程,选中合适的Kit,就可以build了。因为是64位机器,Kit选的是QT 5.5.1的msvc2013_64.
最后千万要注意的是,在系统环境变量%PATH%里,对于Visual Studio的编译器cl.exe和链接器link.exe, 要选对路径。比如,对于64位的机器,路径 C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\amd64 应该被加到%PATH%中,而不是 C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin 这一条在前一篇博文中已有详细阐述。
以上步骤做完后,就可以顺利地在QT Creator中进行build了。
最后还要提醒的一点是,如果更改了.pro文件,想让更改生效,必须手动删除qmake生成的Makefile, Makefile.Debug和Makefile.Release文件。
下面是一个.pro文件的实例:
TEMPLATE = lib TARGET = MyProject Release:DESTDIR = ../../../Output/x64/Release Debug:DESTDIR = ../../../Output/x64/Debug QT += core qml CONFIG += debug_and_release DEFINES += WIN64 QT_DLL QT_QML_LIB MyProject_LIB INCLUDEPATH += ./GeneratedFiles \ . \ ./GeneratedFiles/Release \ $$(VC_INCLUDE) \ $$(VC_INCLUDE)/../atlmfc/include \ $$(WINSDK_INCLUDE)/shared \ $$(WINSDK_INCLUDE)/um DEPENDPATH += . \ $$(WINSDK_LIB)/um/x64 \ $$(VC_LIB)/amd64 \ $$(QTDIR)/lib \ $$(QTDIR)/bin \ Release:DEPENDPATH += ../../../3rd_library/opencv/libs/Release/x64 \ ../../../3rd_library/DirectShow/baseclasses/x64/Release Debug:DEPENDPATH += ../../../3rd_library/opencv/libs/Debug/x64 \ ../../../3rd_library/DirectShow/baseclasses/x64/Debug MOC_DIR += ./GeneratedFiles/release OBJECTS_DIR += release UI_DIR += ./GeneratedFiles RCC_DIR += ./GeneratedFiles Release:LIBS += -L"../../../3rd_library/DirectShow/baseclasses/x64/Release" \ -lstrmbase \ -L"../../../3rd_library/opencv/libs/Release/x64" \ -lqtmain \ -lQt5Qml \ -lQt5Core \ -lopencv_calib3d248 \ -lopencv_contrib248 \ -lopencv_core248 \ -lopencv_features2d248 \ -lopencv_flann248 \ -lopencv_gpu248 \ -lopencv_highgui248 \ -lopencv_imgproc248 \ -lopencv_legacy248 \ -lopencv_ml248 \ -lopencv_nonfree248 \ -lopencv_objdetect248 \ -lopencv_ocl248 \ -lopencv_photo248 \ -lopencv_stitching248 \ -lopencv_superres248 \ -lopencv_ts248 \ -lopencv_video248 \ -lopencv_videostab248 Debug:LIBS += -L"../../../3rd_library/DirectShow/baseclasses/x64/Debug" \ -lstrmbasd \ -L"../../../3rd_library/opencv/libs/Debug/x64" \ -lqtmaind \ -lQt5Qmld \ -lQt5Cored \ -lopencv_calib3d248d \ -lopencv_contrib248d \ -lopencv_core248d \ -lopencv_features2d248d \ -lopencv_flann248d \ -lopencv_gpu248d \ -lopencv_highgui248d \ -lopencv_imgproc248d \ -lopencv_legacy248d \ -lopencv_ml248d \ -lopencv_nonfree248d \ -lopencv_objdetect248d \ -lopencv_ocl248d \ -lopencv_photo248d \ -lopencv_stitching248d \ -lopencv_superres248d \ -lopencv_ts248d \ -lopencv_video248d \ -lopencv_videostab248d LIBS += -L"$$(WINSDK_LIB)/um/x64" \ -L"$$(VC_LIB)/amd64" \ -L"$$(QTDIR)/lib" \ -L"$$(QTDIR)/bin" \ -lWtsapi32 \ -lPathcch \ -l3DScanningEngine \ -lUserenv \ -lwinmm \ -lMf \ -lMfplat include(MyProject.pri)
在实际build的过程中,笔者又发现QT是调用jom.exe去做的。这是个什么呢?原来,在VS里面,有一个工具叫做nmake,它和Linux上的make很像。但是这个nmake有一个缺点(笔者不确定现在还有没有这个缺点,但在2009年的时候是有的),就是它无法利用多核的优势并行编译。于是,就有人写了这么一个叫做jom的工具,类似于是多线程版本的nmake. 最初的那篇介绍jom的文章在这里: http://blog.qt.io/blog/2009/03/27/speeding-up-visual-c-qt-builds/
相关文章推荐
- QT中实现托盘
- Ubuntu下qt+opencv小试牛刀1:打开图片
- Qt for OS X - Deployment(官方文档)
- node.js搭建mqtt服务器(broker)身份验证(auth)
- CPU满格的元凶,这回是由于QTimer引起的(默认interval是0,太猛)
- Qt中用正則表達式来推断Text的语种,主要通过推断unicode的编码范围
- QTableView的应用(Qss美化,加checkbox)
- 自己整的os也能跑qt
- Qt之自定义界面(窗体缩放-跨平台终极版)
- Qt之自定义界面(窗体缩放-跨平台终极版)
- Qt之自定义界面(窗体缩放)
- Qt之自定义界面(窗体缩放)
- PyQt学习笔记01-Qt基本概念进阶篇
- ARM opencv结合Qt测试
- qt
- Qt之自定义界面(添加自定义标题栏)
- Qt之自定义界面(添加自定义标题栏)
- Qt:parent参数
- PyQt学习笔记-开端篇 信号和槽 signal slot
- 搭建Qt界面的OpenCV开发环境