Search code examples
linuxqtqmake

Qmake does not include the library path for qt


I just install qt on my slax box, And I tried to write and compile using qmake.

But the problem is qmake does not write it's 'Makefile' to include -Lqt-mt or -Lqt. I have to give it manually otherwise there are unresolved links are there. What I could do for this?Any workaround on this?

enter image description here

And this is the 'Makefile' output by the qmake.

#############################################################################
# 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:

And here is my .pro file that I used.

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

I already set the $QTDIR and I think everything is in place. Where I missed? Why I have to give it manually? Why qmake does not work in first place?

EDIT: There in makefile

LIBS          = $(SUBLIBS) 

What I did is change it to,

LIBS          = $(SUBLIBS)  -lqt-mt

After I changed everything works fine ! The problem is again , why I have to do such a thing manually?

FOR @Frank Osterfeld I think I'm using correct 'qmake' because , When I hit, qmake --version , I do get this.

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

--Thanks in advance--


Solution

  • When there are multiple Qt installations on a machine, it's important the environment has been set-up properly to point to the right Qt version. The following are important environment variables to check:

    1. $QTDIR -- should point to the base directory for the Qt installation.
    2. $QMAKESPEC -- should point to a make specification directory under $QTDIR (e.g. $QTDIR/mkspecs/linux-g++).
    3. $QT_PLUGIN_PATH -- should point to the plug-in directory, typically within the Qt installation (e.g. $QTDIR/plugins).
    4. $PATH -- should have the $QTDIR/bin directory within it. The installation that you wish to use should be first within the $PATH.

    If all else fails, check your full environment to ensure that the correct Qt installation is being referred to (use env on *nix, set on Windows).

    If you notice directories pointing to the wrong installation within the Makefile generated by qmake, it is likely that your environment hasn't been properly set (in this case, $QMAKESPEC was the culprit).

    Finally, it's important to note that the libraries from Qt3 are no longer present in Qt4: Qt3 has libqt-mt, libqui, etc. Qt4 has libQtCore, libQtGui, etc.