Qt工程转换成VS工程 VS 工程转QT creator

 

Qt工程转换成VS工程

标签: 工程转换VShtml


 


在windows下,运行Qt Command Prompt。api

输入命令行:多线程

qmake -tp vc XXX.pro
ide

会生成文件XXX.vcxproj工具


Visual Studio的project转成QT Creator的ui


projecturl


本人QT生手,最近项目上却有个需求,要将本来的Visual Studio的project转成QT Creator的project。在进行了一番研究和动手实践以及再研究再实践以后,终于成功完成了这一转换,特此记录。spa

环境:.net

- 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文件,网上有不少不错的文章,这里就不赘述了。贴几篇文章的连接以下:


以上谈.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文件的实例:

[plain] view plain copy 在CODE上查看代码片派生到个人代码片

  1. TEMPLATE = lib  

  2. TARGET = MyProject  

  3. Release:DESTDIR = ../../../Output/x64/Release  

  4. Debug:DESTDIR = ../../../Output/x64/Debug  

  5. QT += core qml  

  6. CONFIG += debug_and_release  

  7. DEFINES += WIN64 QT_DLL QT_QML_LIB MyProject_LIB  

  8.   

  9. INCLUDEPATH += ./GeneratedFiles \  

  10.     . \  

  11.     ./GeneratedFiles/Release \  

  12.     $$(VC_INCLUDE) \  

  13.     $$(VC_INCLUDE)/../atlmfc/include \  

  14.     $$(WINSDK_INCLUDE)/shared \  

  15.     $$(WINSDK_INCLUDE)/um  

  16.   

  17. DEPENDPATH += . \  

  18.     $$(WINSDK_LIB)/um/x64 \  

  19.     $$(VC_LIB)/amd64 \  

  20.     $$(QTDIR)/lib \  

  21.     $$(QTDIR)/bin \  

  22.   

  23. Release:DEPENDPATH +=  ../../../3rd_library/opencv/libs/Release/x64 \  

  24.     ../../../3rd_library/DirectShow/baseclasses/x64/Release  

  25.   

  26. Debug:DEPENDPATH += ../../../3rd_library/opencv/libs/Debug/x64 \  

  27.     ../../../3rd_library/DirectShow/baseclasses/x64/Debug  

  28.   

  29. MOC_DIR += ./GeneratedFiles/release  

  30. OBJECTS_DIR += release  

  31. UI_DIR += ./GeneratedFiles  

  32. RCC_DIR += ./GeneratedFiles  

  33.   

  34. Release:LIBS += -L"../../../3rd_library/DirectShow/baseclasses/x64/Release" \  

  35.     -lstrmbase \  

  36.     -L"../../../3rd_library/opencv/libs/Release/x64" \  

  37.     -lqtmain \  

  38.     -lQt5Qml \  

  39.     -lQt5Core \  

  40.     -lopencv_calib3d248 \  

  41.     -lopencv_contrib248 \  

  42.     -lopencv_core248 \  

  43.     -lopencv_features2d248 \  

  44.     -lopencv_flann248 \  

  45.     -lopencv_gpu248 \  

  46.     -lopencv_highgui248 \  

  47.     -lopencv_imgproc248 \  

  48.     -lopencv_legacy248 \  

  49.     -lopencv_ml248 \  

  50.     -lopencv_nonfree248 \  

  51.     -lopencv_objdetect248 \  

  52.     -lopencv_ocl248 \  

  53.     -lopencv_photo248 \  

  54.     -lopencv_stitching248 \  

  55.     -lopencv_superres248 \  

  56.     -lopencv_ts248 \  

  57.     -lopencv_video248 \  

  58.     -lopencv_videostab248  

  59.   

  60. Debug:LIBS += -L"../../../3rd_library/DirectShow/baseclasses/x64/Debug" \  

  61.     -lstrmbasd \  

  62.     -L"../../../3rd_library/opencv/libs/Debug/x64" \  

  63.     -lqtmaind \  

  64.     -lQt5Qmld \  

  65.     -lQt5Cored \  

  66.     -lopencv_calib3d248d \  

  67.     -lopencv_contrib248d \  

  68.     -lopencv_core248d \  

  69.     -lopencv_features2d248d \  

  70.     -lopencv_flann248d \  

  71.     -lopencv_gpu248d \  

  72.     -lopencv_highgui248d \  

  73.     -lopencv_imgproc248d \  

  74.     -lopencv_legacy248d \  

  75.     -lopencv_ml248d \  

  76.     -lopencv_nonfree248d \  

  77.     -lopencv_objdetect248d \  

  78.     -lopencv_ocl248d \  

  79.     -lopencv_photo248d \  

  80.     -lopencv_stitching248d \  

  81.     -lopencv_superres248d \  

  82.     -lopencv_ts248d \  

  83.     -lopencv_video248d \  

  84.     -lopencv_videostab248d  

  85.   

  86. LIBS += -L"$$(WINSDK_LIB)/um/x64" \  

  87.     -L"$$(VC_LIB)/amd64" \  

  88.     -L"$$(QTDIR)/lib" \  

  89.     -L"$$(QTDIR)/bin" \  

  90.     -lWtsapi32 \  

  91.     -lPathcch \  

  92.     -l3DScanningEngine \  

  93.     -lUserenv \  

  94.     -lwinmm \  

  95.     -lMf \  

  96.     -lMfplat  

  97.   

  98. 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/