• 12931阅读
  • 9回复

windows下命令行编译qt程序,找不到头文件问题 [复制链接]

上一主题 下一主题
离线erhumusic182
 

只看楼主 倒序阅读 楼主  发表于: 2012-03-30
windows下命令行编译qt程序,找不到头文件问题
现象:我能用网上介绍的方法生成makefile,调用nmake和wingw32-make debug命令均可编译,但是编译有问题:似乎是找不到qt下的include文件夹,我就将这个路径加入path,发现还是不行,
以下编译出错提到的类都是在哪个目录下,
请问这个问题要怎么解决?


D:\das\src\transmit>nmake

Microsoft (R) 程序维护实用工具 9.00.21022.08 版
版权所有 (C) Microsoft Corporation。保留所有权利。

        "E:\Program Files\Microsoft Visual Studio 9.0\VC\bin\nmake.exe" -f Makefile.Debug

Microsoft (R) 程序维护实用工具 9.00.21022.08 版
版权所有 (C) Microsoft Corporation。保留所有权利。

        g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"c:\Qt\2
g\AnHuiProtocol.o AnHuiProtocol.cpp
In file included from AnHuiProtocol.cpp:2:
AnHuiProtocol.h:15:21: QSqlError: No such file or directory
AnHuiProtocol.h:16:22: QSqlRecord: No such file or directory
In file included from AnHuiProtocol.h:19,
                 from AnHuiProtocol.cpp:2:
..\include\dbConn.h:4:24: QSqlDatabase: No such file or directory
..\include\dbConn.h:5:21: QSqlQuery: No such file or directory
In file included from AnHuiProtocol.h:19,
                 from AnHuiProtocol.cpp:2:
..\include\dbConn.h:31: error: `QSqlDatabase' has not been declared
..\include\dbConn.h:31: error: ISO C++ forbids declaration of `parameter' with no type
..\include\dbConn.h:35: error: `QSqlDatabase' does not name a type
..\include\dbConn.h:69: error: `QSqlRecord' was not declared in this scope
..\include\dbConn.h:69: error: template argument 1 is invalid
..\include\dbConn.h:69: error: ISO C++ forbids declaration of `GetRecbyVarName' with no type
qt爱好者
离线dbzhang800

只看该作者 1楼 发表于: 2012-03-30
1. 不存在mingw32-make 和 nmake都行一说,除非你的Makefile文件非常简单,能同时符合二者的要求。

2. 你强调命令行编译出问题的意图是什么。是说你这个程序不用命令行时编译正常?

3. Include路径 和  path 没有关系

4. 看起来全是qsql的错误,莫非你的pro文件内没有 QT+=sql ??(暂且假定你用的qmake)
离线erhumusic182

只看该作者 2楼 发表于: 2012-03-30
1. 不存在mingw32-make 和 nmake都行一说,除非你的Makefile文件非常简单,能同时符合二者的要求。
我就是用qmake生成的makefile,还没有注意过其中的内容,但是执行两个命令出错现象是一样的。

2. 你强调命令行编译出问题的意图是什么。是说你这个程序不用命令行时编译正常?
因为用vs打开编译是没有问题的,所以强调命令行不行。

3. Include路径 和  path 没有关系
因为看见报错里面提醒的那些类名都好像是在include目录里面,比如QSqlError在include里面就有个QSqlError文件

4. 看起来全是qsql的错误,莫非你的pro文件内没有 QT+=sql ??(暂且假定你用的qmake)
还有QHostInfo错误:AnHuiProtocol.cpp:3:21: QHostInfo: No such file or directory
AnHuiProtocol.cpp: In constructor `AnHuiProtocol::AnHuiProtocol()':
AnHuiProtocol.cpp:20: error: `myDB' was not declared in this scope


要怎么解决呢?刚才和别人讨论问题没有及时回复,坐等!谢谢
qt爱好者
离线erhumusic182

只看该作者 3楼 发表于: 2012-03-30
pro文件是这样的:
######################################################################
# Automatically generated by qmake (2.01a) ?? ?? 27 13:34:59 2012
######################################################################

TEMPLATE = app
TARGET = transmit
DEPENDPATH += . Debug
INCLUDEPATH += .

# Input
HEADERS += AnHuiProtocol.h \
           HJ_T212.h \
           InstanceMutex.h \
           MODBUSCls.h \
           myCommon.h \
           provVer.h \
           qextserialbase.h \
           qextserialenumerator.h \
           qextserialport.h \
           qextserialport_global.h \
           SeriSubmitProtocol.h \
           transmit.h \
           win_qextserialport.h \
           XmlStreamRead.h \
           ../include/IPCDBus.h \
           ../include/dbConn.h \
           ../lib/dbConn/dbConn_global.h \
           ../include/common.h \
           ../include/msgStruct.h \
           ../include/msgType.h \
           ../include/sysSize.h
SOURCES += AnHuiProtocol.cpp \
           HJ_T212.cpp \
           InstanceMutex.cpp \
           main.cpp \
           MODBUSCls.cpp \
           qextserialbase.cpp \
           qextserialenumerator.cpp \
           qextserialport.cpp \
           SeriSubmitProtocol.cpp \
           transmit.cpp \
           win_qextserialport.cpp \
           XmlStreamRead.cpp
RESOURCES += transmit.qrc
qt爱好者
离线erhumusic182

只看该作者 4楼 发表于: 2012-03-30
谁能教教我!
qt爱好者
离线dbzhang800

只看该作者 5楼 发表于: 2012-03-30
你这个 .pro 本身是错的。不仅我前面提到的 QT+=sql 你这里面没有加,你追加的网络模块,这里面也没有体现 QT+=network

nmake 和 mingw32-make 尽管语法大致类似,但是差异很大,一般是不能混用的。

至于你提到的在Vs下编译通过,只能说明你的VS的工程不过使用这个.pro文件生成的

qmake -tp vc

生成的 vcproj ,你同样有这堆错误。和是否命令行没有关系。
离线dbzhang800

只看该作者 6楼 发表于: 2012-03-30
离线erhumusic182

只看该作者 7楼 发表于: 2012-03-30
谢谢,我给你发消息了!
qt爱好者
离线dbzhang800

只看该作者 8楼 发表于: 2012-03-30
呵呵,我不怎么用QQ,而且我这边马上就凌晨1点了,要下线了。

不过该说的我前面都提到了,其实无非就是头文件路径(编译阶段)和库文件(链接阶段)的问题,只要概念清楚,其他都是浮云。工具有很多,设置方式各异,但概念不变。
离线erhumusic182

只看该作者 9楼 发表于: 2012-03-30
你在哪里工作啊?
qt爱好者
快速回复
限100 字节
 
上一个 下一个