【问题标题】:Qmake does not include the library path for qtQmake 不包含 qt 的库路径
【发布时间】:2012-10-29 18:07:47
【问题描述】:

我只是在我的 slax 盒子上安装了 qt, 我尝试使用 qmake 编写和编译。

但问题是 qmake 没有写它的“Makefile”来包含 -Lqt-mt 或 -Lqt。 我必须手动提供,否则会有未解决的链接。我能做什么 为此做什么?有什么解决方法吗?

这是 qmake 输出的“Makefile”。

#############################################################################
# Makefile for building: hello
# Generated by qmake (2.01a) (Qt 4.5.3) on: Tue Feb 2 04:04:03 2010
# Project:  hello_world.pro
# Template: app
# Command: /usr/bin/qmake -unix -o Makefile hello_world.pro
#############################################################################

####### Compiler, tools and options

CC            = gcc
CXX           = g++
DEFINES       = 
CFLAGS        = -pipe $(DEFINES)
CXXFLAGS      = -pipe $(DEFINES)
INCPATH       = -I/usr/lib/qt-3.3.8b/mkspecs/linux-g++ -I.
LINK          = g++
LFLAGS        = 
LIBS          = $(SUBLIBS)   
AR            = ar cqs
RANLIB        = 
QMAKE         = /usr/bin/qmake
TAR           = tar -cf
COMPRESS      = gzip -9f
COPY          = cp -f
SED           = sed
COPY_FILE     = $(COPY)
COPY_DIR      = $(COPY) -r
INSTALL_FILE  = $(COPY_FILE)
INSTALL_DIR   = $(COPY_DIR)
INSTALL_PROGRAM = $(COPY_FILE)
DEL_FILE      = rm -f
SYMLINK       = ln -sf
DEL_DIR       = rmdir
MOVE          = mv -f
CHK_DIR_EXISTS= test -d
MKDIR         = mkdir -p

####### Output directory

OBJECTS_DIR   = ./

####### Files

SOURCES       = hello_world.cpp 
OBJECTS       = hello_world.o
DIST          = hello_world.pro
QMAKE_TARGET  = hello
DESTDIR       = 
TARGET        = hello

first: all
####### Implicit rules

.SUFFIXES: .o .c .cpp .cc .cxx .C

.cpp.o:
    $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"

.cc.o:
    $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"

.cxx.o:
    $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"

.C.o:
    $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"

.c.o:
    $(CC) -c $(CFLAGS) $(INCPATH) -o "$@" "$<"

####### Build rules

all: Makefile $(TARGET)

$(TARGET):  $(OBJECTS)  
    $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS)

Makefile: hello_world.pro  /usr/lib/qt-3.3.8b/mkspecs/linux-g++/qmake.conf 
    $(QMAKE) -unix -o Makefile hello_world.pro
qmake:  FORCE
    @$(QMAKE) -unix -o Makefile hello_world.pro

dist: 
    @$(CHK_DIR_EXISTS) .tmp/hello1.0.0 || $(MKDIR) .tmp/hello1.0.0 
    $(COPY_FILE) --parents $(SOURCES) $(DIST) .tmp/hello1.0.0/ && (cd `dirname .tmp/hello1.0.0` && $(TAR) hello1.0.0.tar hello1.0.0 && $(COMPRESS) hello1.0.0.tar) && $(MOVE) `dirname .tmp/hello1.0.0`/hello1.0.0.tar.gz . && $(DEL_FILE) -r .tmp/hello1.0.0


clean:compiler_clean 
    -$(DEL_FILE) $(OBJECTS)
    -$(DEL_FILE) *~ core *.core


####### Sub-libraries

distclean: clean
    -$(DEL_FILE) $(TARGET) 
    -$(DEL_FILE) Makefile


compiler_clean: 

####### Compile

hello_world.o: hello_world.cpp 
    $(CXX) -c $(CXXFLAGS) $(INCPATH) -o hello_world.o hello_world.cpp

####### Install

install:   FORCE

uninstall:   FORCE

FORCE:

这是我使用的 .pro 文件。

TEMPLATE=app
CONFIG+= qt warn_on release
HEADERS=
SOURCES=hello_world.cpp
TARGET=hello

我已经设置了 $QTDIR,并且我认为一切都已就绪。 我错过了哪里?为什么我必须手动给它?为什么qmake首先不起作用 地点?

编辑: 在makefile中有

LIBS          = $(SUBLIBS) 

我所做的就是把它改成,

LIBS          = $(SUBLIBS)  -lqt-mt

更改后一切正常!问题又来了,为什么我必须这样做 手动的东西?

为@Frank Osterfeld 我想我正在使用正确的“qmake”,因为, 当我点击 qmake --version 时,我确实明白了。

QMake version 2.01a
Using Qt version 4.5.3 in /usr/lib/qt/lib

--提前致谢--

【问题讨论】:

  • 命令qmake -query的结果是什么?
  • 你的项目文件是什么样的?
  • 发布 .pro 文件。你想使用哪个 Qt 版本,Qt3 还是 Qt4?您似乎在 Qt4 .pro 文件上运行 qt3 qmake。
  • @sandundhammika Qt3 和 Qt4 之间肯定存在混淆。您的 Makefile 有许多对 Qt3 make 规范的引用。此外,Qt4 没有“qt-mt”或“qt”库。使用 CONFIG += qt 应该可以获得 QtCore 和 QtGui 库。
  • @sandundhammika 其他一些尝试: 1. 确保 Qt4 bin 目录在 $PATH 中 Qt3 bin 目录之前。 2. 确保 $QMAKESPEC 指向 Qt4 make 规范。 3. 确保 $QT_PLUGIN_PATH 也设置为您的 Qt4 目录。 4. 如果一切都失败了,在你的整个环境中检查 Qt 类似 env | grep -i "qt"

标签: linux qt qmake


【解决方案1】:

当一台机器上安装了多个 Qt 时,正确设置环境以指向正确的 Qt 版本非常重要。以下是需要检查的重要环境变量:

  1. $QTDIR -- 应该指向 Qt 安装的基目录。
  2. $QMAKESPEC -- 应该指向$QTDIR 下的make 规范目录(例如$QTDIR/mkspecs/linux-g++)。
  3. $QT_PLUGIN_PATH -- 应该指向插件目录,通常在 Qt 安装中(例如 $QTDIR/plugins)。
  4. $PATH -- 里面应该有 $QTDIR/bin 目录。您希望使用的安装应首先在 $PATH 中。

如果一切都失败了,请检查您的完整环境以确保引用了正确的 Qt 安装(在 *nix 上使用 env,在 Windows 上使用 set)。

如果您注意到qmake 生成的Makefile 中的目录指向错误的安装,则可能是您的环境设置不正确(在这种情况下,$QMAKESPEC 是罪魁祸首)。

最后,需要注意的是,来自 Qt3 的库不再存在于 Qt4 中:Qt3 有 libqt-mtlibqui 等。Qt4 有 libQtCorelibQtGui 等。

【讨论】:

  • 或者最好不要使用这些变量,而是使用正确的 qmake 可执行文件。可能是qtchooser 会有所帮助。您将提供给qmake 的唯一内容是-spec 参数,可以在qtbase/mkspecs 中找到。祝你好运。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多