Linking with a debug/release lib with qmake/Qt Creator

24,270

Solution 1

In your project file you can do something like this

debug {
    LIBS += -L./libfolder -lmydebuglib.lib
}

release {
    LIBS += -L./libfolder -lmyreleaselib.lib
}

The bit inside the debug braces is used if DEBUG has been added to the CONFIG qmake variable, similarly stuff inside the release brackets is included if RELEASE has been added to the CONFIG variable.

You can also use "!debug" rather than "release" (i.e. when debug isn't in the config)

You can find more information on qmake here.

Solution 2

The normal

debug:LIBS += ...
else:LIBS += ...

solution breaks when users naively use CONFIG += debug or CONFIG += release to switch between debug and release builds (and they do; no-one remembers to say CONFIG -= release release_and_debug before CONFIG += debug :).

This is the canonical way to scope on debug:

CONFIG( debug, debug|release ) {
    # debug
    QMAKE_LIBDIR += "path/to/debug/lib"
} else {
    # release
    QMAKE_LIBDIR += "path/to/release/lib"
}

Cf. the qmake docs.

EDIT 2013-11-17: Don't use -Lfoo in LIBS. The canonical way is to add the paths (without the -L) to QMAKE_LIBDIR.

Share:
24,270

Related videos on Youtube

Rob
Author by

Rob

C++, MFC, Win32, WTL, STL, Boost, HTML, CSS, JavaScript, Qt, Python, jQuery Mobile.

Updated on July 09, 2022

Comments

  • Rob
    Rob almost 2 years

    I am using Qt Creator and have a Qt GUI project that depends on a C++ static library project. I want to link the release version of the GUI app with the release build of the .lib and the debug release of the GUI app with the debug .lib. I have found out how to add additional libraries to the project by including a line like the following in my .pro file:

    LIBS += -L./libfolder -lmylib.lib

    But I cannot see how I can use a different -L command for release and debug builds.

    Is there support in qmake to do this?

  • Admin
    Admin about 13 years
    Note that it chokes if you put the brace on the next line...:-(
  • the_naive
    the_naive almost 11 years
    Is it the same for Windows too? What about if I have space in the paths of Lib files.
  • László Papp
    László Papp almost 10 years
    What exactly do you mean by canonical way, Marc? Someone without enough reputation is asking that in here.
  • McLeary
    McLeary over 8 years
    +1 because the "cannonical" form works both windows and linux. I was having a bit of trouble in Windows since using debug{} release{} was always linking to debug{} libs.