windows中使用CMake和Eclipse开发Qt程序遇到的问题

    经过三天的尝试,摸索,终于把项目从vs和qt creator中转到了cmake 和eclipse,中间几次都想放弃了。

     在windows下用Visual Studio开发肯定是最方便的,但是程序用户的电脑装的xp系统(吐槽一下,几百号人的设计院,清一色的xp+集成显卡,17寸显示屏),只能支持到vs2008,自己写的程序有些是在vs2012中用C++0x写的,2008编译不能通过,只能选用Mingw平台。Qt Creator没有对python脚本的支持,也不太方便。因此选择了Cmake+Eclipse。满足了下边几个要求:

    (1)out of source build

     (2)  使用c++编写程序和共享库,使用python编写脚本进行文件管理和MS word的操作。

     (3) 更换平台之后,代码不用改,也不必安装eclipse(配置eclipse实在太麻烦了),直接cmake,make就能构建程序。

    整体思路:写cmakelists

                  ->创建一个空的eclipse项目,参见参考[1]

                  ->添加target,参见参考[2]

                  ->添加到src和executable文件夹的link。

    google上关于具体步骤的文章已经比较多了,这里说下自己这两天遇到的问题。

    (1)eclipse能够正常编译,但是代码编辑器中不能跳转头文件,很多错误:

    原因:eclipse代码编辑器中代码分析和编译器的代码分析是相对独立的,由于使用了no toolchain,不会自动导入C_INCLUDE_PATH,CPLUS_INCLUDE_PATH中的文件进行头文件跳转分析。

           解决方案:很多人提供的方法是将头文件添加到paths and symbols 中。MinGW和Qt加起来有十来个目录,弄起来比较麻烦,也容易出错。我是在创建项目时选择cross gcc toolchain,这样会自动将C_INCLUDE_PATH和CPLUS_INCLUDE_PATH中的头文件添加到搜索目录中,比较省事。

     (2)gdb无法运行,错误代码:unknown target exception XXX

            原因:环境变量设置有问题,见参考[3]

           感觉这个有点看脸了,开始弄了两天没弄好,差点就换Qt Creator了,最后莫名奇妙的就能用了:)

          参考下最后成功时候的bat,如果还不行也没办法了:

 1 set PATH=D:\develop\Qt\5.1.0\5.1.0\mingw48_32\bin;d:\develop\Qt\5.1.0\Tools\mingw48_32\bin;%PATH%
 2 set CPLUS_INCLUDE_PATH=%CPLUS_INCLUDE_PATH%;D:\develop\Qt\5.1.0\5.1.0\mingw48_32\include
 3 set CPLUS_INCLUDE_PATH=%CPLUS_INCLUDE_PATH%;D:\develop\Qt\5.1.0\5.1.0\mingw48_32\include\QtCore
 4 set CPLUS_INCLUDE_PATH=%CPLUS_INCLUDE_PATH%;D:\develop\Qt\5.1.0\5.1.0\mingw48_32\include\QtGui
 5 set CPLUS_INCLUDE_PATH=%CPLUS_INCLUDE_PATH%;D:\develop\Qt\5.1.0\5.1.0\mingw48_32\include\QtWidgets
 6 set CPLUS_INCLUDE_PATH=%CPLUS_INCLUDE_PATH%;D:\develop\Qt\5.1.0\5.1.0\mingw48_32\include\QtOpenGL
 7 set C_INCLUDE_PATH=%C_INCLUDE_PATH%;D:\develop\Qt\5.1.0\5.1.0\mingw48_32\include
 8 set C_INCLUDE_PATH=%C_INCLUDE_PATH%;D:\develop\Qt\5.1.0\5.1.0\mingw48_32\include\QtCore
 9 set C_INCLUDE_PATH=%C_INCLUDE_PATH%;D:\develop\Qt\5.1.0\5.1.0\mingw48_32\include\QtGui
10 set C_INCLUDE_PATH=%C_INCLUDE_PATH%;D:\develop\Qt\5.1.0\5.1.0\mingw48_32\include\QtWidgets
11 set C_INCLUDE_PATH=%C_INCLUDE_PATH%;D:\develop\Qt\5.1.0\5.1.0\mingw48_32\include\QtOpenGL
12 set LIBRARY_PATH=%LIBRARY_PATH%;D:\develop\Qt\5.1.0\5.1.0\mingw48_32\lib
13 REM set PATH=%PATH%;%LIBRARY_PATH%;D:\develop\Qt\5.1.0\Tools\QtCreator\bin

           有人说把lib也加到path里边,后来注释掉了gdb也能运行

      (3) gdb 提示warning:eclipse Internal error: pc 0x0 in read in psymtab, but not in symtab.

           原因:和共享库symbol的加载有关

           解决方案:debug Configurations -> Debugger-> 选项卡Shared Libraries : uncheck  ”Load shared library symbols automatically“

      (4) no rules to make target "all"

           原因:一般是因为找不到makefile

          解决方案:检查build directory ,如果是点的小锤子检查build command,如果是make target检查target的命令

      (5)qt程序中显示console窗口

          方法:在cmakelists中添加下边的语句:

            SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mconsole")

          如果不想要console

            SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mwindows")

       (6)eclipse中不能索引std::shared_ptr,std::array,等

             原因:使用的c++98标准库

             解决方案:在paths and symbols中将symbol __cplusplus改为201103L

       (7)Qt中使用openGL

                      if(QT_WITH_OPENGL)
                             find_package(OPENGL REQUIRED)
                             find_package(QT5OpenGL REQUIRED)
                             message(STATUS "\twith QT opengl")
                             message(STATUS "opengl libs : ${OPENGL_LIBRARY}")
                             qt5_use_modules(${MODULE_NAME} OpenGL)
                             target_link_libraries(${MODULE_NAME} ${OPENGL_LIBRARY})

                       endif()

参考:

     [1]CMake:Eclipse UNIX Tutorial http://www.vtk.org/Wiki/CMake:Eclipse_UNIX_Tutorial

     [2]全方位打造 Eclipse 自定义开发环境    http://www.cnblogs.com/dabaopku/archive/2012/02/11/2346802.html

     [3]集成QtCreator与Eclipse CDT,及相关问题的解决 http://blog.csdn.net/dyw/article/details/3863064

posted @ 2013-08-24 18:08  onehap  阅读(2943)  评论(0编辑  收藏  举报