在Qt sourcetree之外构建一个Qt应用程序

时间:2011-06-15 16:25:54

标签: qt qmake

我创建了一个基于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时,我在示例目录中获得相同的行为。

2 个答案:

答案 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。)