我创建了一个基于Qt示例应用程序的简单Qt应用程序,并在Qt sourcetree的“ examples ”目录中构建得很好。
现在我想将项目文件移动到其他位置,但是qmake无法创建可以找到Qt头文件的Makefile。
项目文件已从~/qt-everywhere-opensource-src-4.7.2/examples/webkit/fullscreenbrowser
移至~/cvswork/fullscreenbrowser/
所以 .pro 文件现在是~/cvswork/fullscreenbrowser/fullscreenbrowser.pro
Qt来源仍在~/qt-everywhere-opensource-src-4.7.2
qmake
本身运行良好,但make
无法加载某些包含:
$ make
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_WEBKIT_LIB
-DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB
-I/usr/share/qt4/mkspecs/linux-g++
-I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtNetwork
-I/usr/include/qt4/QtGui
-I/usr/include/qt4/QtWebKit
-I/usr/include/qt4
-I.
-o main.o main.cpp
main.cpp:41:17: error: QtGui: No such file or directory
为了进行比较,在 ... examples ... 目录下构建时,第一个g++
调用有很大不同:
$ make
g++ -c -pipe -fno-exceptions -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG
-DQT_WEBKIT_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_HAVE_MMX
-DQT_HAVE_3DNOW -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_HAVE_SSE2 -DQT_HAVE_SSE3
-DQT_HAVE_SSSE3 -DQT_HAVE_SSE4_1 -DQT_HAVE_SSE4_2 -DQT_HAVE_AVX -DQT_SHARED
-I../../../mkspecs/qws/linux-x86-g++
-I.
-I../../../include/QtCore
-I../../../include/QtNetwork
-I../../../include/QtGui
-I../../../include/QtWebKit
-I../../../include
-I.moc/release-shared-emb-x86
-o .obj/release-shared-emb-x86/main.o main.cpp
我需要配置什么才能找到Qt源目录?
编辑:fullscreenbrowser.pro
文件可在此处查看:http://pastebin.com/jUPJiWBC
EDIT2 :在向-nocache
电话中添加qmake
时,我在示例目录中获得相同的行为。
答案 0 :(得分:0)
该示例可能尝试包含层次结构中其他位置的文件。对于简单的情况,您通常可以生成新的项目文件,如下所示:
qmake -project # generate a project file using defaults
qmake # generate a makefile from the project file
make # build using the makefile
qmake
将以递归方式检查和包含文件。想要解决所有问题并不是很聪明,就像你可能需要的每个模块一样,但它在简单的测试项目上做得很好。我通常会为我的所有尖峰做上述事情。
答案 1 :(得分:0)
我认为这实际上或多或少都是设计的。在源文件夹内部构建需要与针对已安装的树构建有点不同,只是为了能够进行合理的升级(在没有引用任何现有构建的情况下预先构建所有内容)。
我相信“技巧”是在配置源树时创建的顶层源文件夹(在您的情况下为.qmake.cache
)中的特定~/qt-everywhere-opensource-src-4.7.2
文件完成的(恰好构建了{ {1}}在那里。)
尝试将该文件复制到新的构建位置(qmake
或~/cvswork/fullscreenbrowser/
,如果您有其他项目,它也应该在那里查看),然后重新运行~/cvswork
(确保您使用Qt源目录中的一个。)
如果您只是配置了源树,这应该可以工作。
以下是解压缩并配置旧Qt存档后我的计算机上qmake
文件的第一行:
.qmake.cache
如您所见,许多基本CONFIG += release shared dll largefile stl precompile_header mmx 3dnow sse sse2 sse3 ssse3 sse4_1 sse4_2 avx dylib create_prl link_prl depend_includepath fix_output_dirs QTDIR_build
QT_SOURCE_TREE = $$quote(/home/foo/src/qt-everywhere-opensource-src-4.7.3)
QT_BUILD_TREE = $$quote(/home/foo/src/qt-everywhere-opensource-src-4.7.3)
QT_BUILD_PARTS = libs tools examples demos docs translations
QMAKE_ABSOLUTE_SOURCE_ROOT = $$QT_SOURCE_TREE
QMAKE_MOC_SRC = $$QT_BUILD_TREE/src/moc
#local paths that cannot be queried from the QT_INSTALL_* properties while building QTDIR
QMAKE_MOC = $$QT_BUILD_TREE/bin/moc
QMAKE_UIC = $$QT_BUILD_TREE/bin/uic
QMAKE_UIC3 = $$QT_BUILD_TREE/bin/uic3
QMAKE_RCC = $$QT_BUILD_TREE/bin/rcc
QMAKE_QDBUSXML2CPP = $$QT_BUILD_TREE/bin/qdbusxml2cpp
QMAKE_INCDIR_QT = $$QT_BUILD_TREE/include
QMAKE_LIBDIR_QT = $$QT_BUILD_TREE/lib
QMAKE_LFLAGS = -Wl,-rpath-link,$$QT_BUILD_TREE/lib $$QMAKE_LFLAGS
QT_CFLAGS_PSQL = -I/usr/include/postgresql-8.4
QT_LFLAGS_PSQL = -L/usr/lib64/postgresql-8.4/lib64
QT_CFLAGS_MYSQL = -I/usr/include/mysql
QT_LFLAGS_MYSQL = -Wl,-O1 -Wl,--as-needed -rdynamic -L/usr/lib64/mysql -lmysqlclient_r -L/usr//lib64 -lz -lpthread -lcrypt -lnsl -lm -lpthread -L/usr/lib64/ -lssl -lcrypto
Q T_LFLAGS_ODBC = -lodbc
QMAKESPEC = $$QT_BUILD_TREE/mkspecs/linux-g++-64
...
变量都被该构建树前缀覆盖。
(不确定为什么你不能简单地在你的主目录中的某个地方安装Qt。你不会有任何这种痛苦,你不需要qmake
我认为只要前缀是你自己的 - 虽然没有尝试过,但YMMV。)